/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; |
} |
} |
} |