Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 2060 → Rev 2061

/es2018/17210/src/java/pt/estgp/es/exemplos/hibernate/web/pluginSession/ServerRegisterSession.java
New file
0,0 → 1,34
package pt.estgp.es.exemplos.hibernate.web.pluginSession;
 
import pt.estgp.es.exemplos.hibernate.UserSession;
import pt.estgp.es.exemplos.hibernate.services.ServicoSessoes;
 
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
 
public class ServerRegisterSession implements RegisterSession {
 
 
/**
* Abre uma sessao se esta não existir
* Não lida com o User da Sessão, se não existir
* significa que não está autenticado
*
* @param servletRequest
* @return
* @throws IOException
* @throws ServletException
*/
@Override
public UserSession openSession(ServletRequest servletRequest)
{
return new ServicoSessoes()
.registerUserSession(
((HttpServletRequest)servletRequest).getSession().getId()
);
}
 
 
}
/es2018/17210/src/java/pt/estgp/es/exemplos/hibernate/web/pluginSession/PluginFactory.java
New file
0,0 → 1,23
package pt.estgp.es.exemplos.hibernate.web.pluginSession;
 
import java.io.IOException;
import java.util.Properties;
 
public class PluginFactory
{
static Properties properties = new Properties();
static
{
try {
properties.load(PluginFactory.class.getResourceAsStream("/plugins.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
 
public static Object getPlugin(Class iface) throws ClassNotFoundException, IllegalAccessException, InstantiationException
{
String classNameVerdadeiro = properties.getProperty(iface.getName());
return Class.forName(classNameVerdadeiro).newInstance();
}
}
/es2018/17210/src/java/pt/estgp/es/exemplos/hibernate/web/pluginSession/DevelopRegisterSession.java
New file
0,0 → 1,55
package pt.estgp.es.exemplos.hibernate.web.pluginSession;
 
import pt.estgp.es.exemplos.hibernate.HibernateUtils;
import pt.estgp.es.exemplos.hibernate.User;
import pt.estgp.es.exemplos.hibernate.UserSession;
import pt.estgp.es.exemplos.hibernate.UserSessionImpl;
import pt.estgp.es.exemplos.hibernate.security.SecurityContextProvider;
 
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
 
public class DevelopRegisterSession implements RegisterSession {
 
/**
* Abre uma sessao se esta não existir e associa-a sempre ao User com id 1
* @param servletRequest
* @return
* @throws IOException
* @throws ServletException
*/
@Override
public UserSession openSession(ServletRequest servletRequest) {
HttpServletRequest request = (HttpServletRequest) servletRequest;
 
SecurityContextProvider.getInstance().registerSessionContext(request.getSession().getId());
UserSession session;
HibernateUtils.getCurrentSession().beginTransaction();
try {
//TODO Mudar par get em vez de load como demonstra a imagem
session = (UserSession) HibernateUtils.getCurrentSession().get(UserSession.class, request.getSession().getId());
if(session == null)
{
session = new UserSessionImpl();
session.setCookie(request.getSession().getId());
HibernateUtils.getCurrentSession().save(session);
}
}catch(Exception e)
{
session = new UserSessionImpl();
session.setCookie(request.getSession().getId());
HibernateUtils.getCurrentSession().save(session);
}
User u = (User) HibernateUtils.getCurrentSession().get(User.class, new Long(1));
 
u = (User) HibernateUtils.narrow(u);
 
session.setUser(u);
 
session = (UserSession) HibernateUtils.narrow(session);
HibernateUtils.getCurrentSession().getTransaction().commit();
return session;
}
}
/es2018/17210/src/java/pt/estgp/es/exemplos/hibernate/web/pluginSession/RegisterSession.java
New file
0,0 → 1,12
package pt.estgp.es.exemplos.hibernate.web.pluginSession;
 
import pt.estgp.es.exemplos.hibernate.UserSession;
 
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import java.io.IOException;
 
public interface RegisterSession
{
public UserSession openSession(ServletRequest servletRequest);
}
/es2018/17210/src/java/pt/estgp/es/exemplos/hibernate/web/pluginSession.zip
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/es2018/17210/src/java/pt/estgp/es/exemplos/hibernate/web/login/LoginRest.java
New file
0,0 → 1,35
package pt.estgp.es.exemplos.hibernate.web.login;
 
import org.json.JSONException;
import org.json.JSONObject;
import pt.estgp.es.exemplos.hibernate.web.rest.AbstractRestServlet;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class LoginRest extends AbstractRestServlet
{
public JSONObject login(JSONObject data, HttpServletRequest req, HttpServletResponse resp) throws JSONException
{
String username = data.getString("username");
String password = data.getString("password");
 
System.out.println(username);
System.out.println(password);
 
JSONObject js = new JSONObject();
js.put("result","ok");
 
addMessage("User autenticado com sucesso",req);
 
return js;
}
 
public JSONObject logout(JSONObject data, HttpServletRequest req, HttpServletResponse resp) throws JSONException
{
JSONObject js = new JSONObject();
js.put("result","ok");
 
return js;
}
}
/es2018/17210/src/java/pt/estgp/es/exemplos/hibernate/web/SecurityFilter.java
New file
0,0 → 1,55
package pt.estgp.es.exemplos.hibernate.web;
 
import org.apache.log4j.Logger;
import pt.estgp.es.exemplos.hibernate.UserSession;
import pt.estgp.es.exemplos.hibernate.web.pluginSession.PluginFactory;
import pt.estgp.es.exemplos.hibernate.web.pluginSession.RegisterSession;
 
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
public class SecurityFilter implements Filter {
 
 
 
private static final Logger logger = Logger.getLogger(SecurityFilter.class);
 
private static final String SESSION_IN_REQUEST_KEY = "UserSession";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
 
}
 
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
loadSessionProxy(servletRequest);
filterChain.doFilter(servletRequest, response);
}
 
 
 
public static UserSession loadSessionProxy(ServletRequest servletRequest) throws IOException, ServletException {
 
UserSession session = (UserSession) servletRequest.getAttribute(SESSION_IN_REQUEST_KEY);
 
try {
if(session == null) {
RegisterSession plugin;
plugin = (RegisterSession) PluginFactory.getPlugin(RegisterSession.class);
session = plugin.openSession(servletRequest);
servletRequest.setAttribute(SESSION_IN_REQUEST_KEY,session);
}
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
logger.error(e,e);
return null;
}
return session;
}
 
@Override
public void destroy() {
 
}
}
/es2018/17210/src/java/pt/estgp/es/exemplos/hibernate/web/rest/AbstractRestServlet.java
New file
0,0 → 1,150
package pt.estgp.es.exemplos.hibernate.web.rest;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import pt.estgp.es.exemplos.hibernate.utils.StreamsUtils;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
 
public abstract class AbstractRestServlet extends HttpServlet
{
 
 
 
public void addMessage(String mensagem, HttpServletRequest request)
{
List<String> messages = (List<String>) request.getAttribute("Messages");
messages.add(mensagem);
}
 
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
process(req,resp);
}
 
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
process(req,resp);
}
 
protected void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
 
 
req.setAttribute("Messages",new ArrayList<String>());
if(req.getContentType() != null && req.getContentType().equalsIgnoreCase("application/json"))
{
InputStream content = req.getInputStream();
if(content != null)
{
try {
ParseJsonRequestResult parseJsonRequestResult = new ParseJsonRequestResult(content).invoke();
invokeService(req, resp, parseJsonRequestResult.getService(), parseJsonRequestResult.getData());
} catch (Throwable e) {
sendErrorResponse(resp, e);
}
}
}
else
{
JSONObject response = new JSONObject();
try {
response.put("service","error");
response.put("response","REST REQUEST REQUIRED");
resp.setContentType("application/json");
PrintWriter pw = resp.getWriter();
pw.write(response.toString());
} catch (JSONException e) {
e.printStackTrace();
}
 
 
 
}
 
 
}
 
private void invokeService(HttpServletRequest req, HttpServletResponse resp, String service, JSONObject data) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, JSONException, IOException {
Method innerMethod = this.getClass().getMethod(service,new Class[]{
JSONObject.class,
HttpServletRequest.class,
HttpServletResponse.class});
JSONObject obj = (JSONObject) innerMethod.invoke(this,new Object[]{data,req,resp});
 
JSONObject response = new JSONObject();
response.put("service","ok");
response.put("response",obj);
 
List<String> messages = (List<String>) req.getAttribute("Messages");
 
if(messages.size() > 0)
{
JSONArray msgs = new JSONArray();
for(String msgAdded: messages)
{
msgs.put(msgAdded);
}
response.put("messages",msgs);
}
 
resp.setContentType("application/json");
PrintWriter pw = resp.getWriter();
pw.write(response.toString());
}
 
private void sendErrorResponse(HttpServletResponse resp, Throwable e) throws IOException {
e.printStackTrace();
JSONObject response = new JSONObject();
try {
response.put("service","error");
response.put("exception",e.toString());
resp.setContentType("application/json");
PrintWriter pw = resp.getWriter();
pw.write(response.toString());
} catch (JSONException e1) {
e1.printStackTrace();
}
}
 
private class ParseJsonRequestResult {
private InputStream content;
private String service;
private JSONObject data;
 
public ParseJsonRequestResult(InputStream content) {
this.content = content;
}
 
public String getService() {
return service;
}
 
public JSONObject getData() {
return data;
}
 
public ParseJsonRequestResult invoke() throws IOException, JSONException {
JSONObject requestObj;
String json = StreamsUtils.readString(content);
requestObj = new JSONObject(json);
System.out.println("REQUEST JSON:");
System.out.println(requestObj.toString());
 
service = requestObj.getString("service");
data = requestObj.has("data") ? requestObj.getJSONObject("data") : null;
return this;
}
}
}