Roberto Sánchez
2013-12-19 4362922ba00a22d9177df1731673b5fb4db03fb5
securis/src/main/java/net/curisit/securis/MainApp.java
....@@ -4,16 +4,22 @@
44
55 import javax.inject.Inject;
66 import javax.inject.Named;
7
+import javax.ws.rs.core.MediaType;
8
+import javax.ws.rs.core.Response;
9
+import javax.ws.rs.ext.ExceptionMapper;
10
+import javax.ws.rs.ext.Provider;
711
812 import net.curisit.securis.ioc.RequestsModule;
913 import net.curisit.securis.ioc.SecurisModule;
1014
1115 import org.eclipse.jetty.server.Server;
16
+import org.eclipse.jetty.servlet.ErrorPageErrorHandler;
1217 import org.eclipse.jetty.servlet.FilterHolder;
1318 import org.eclipse.jetty.servlet.ServletContextHandler;
1419 import org.eclipse.jetty.servlet.ServletHolder;
1520 import org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener;
1621 import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
22
+import org.jboss.resteasy.util.HttpResponseCodes;
1723 import org.slf4j.Logger;
1824 import org.slf4j.LoggerFactory;
1925
....@@ -53,13 +59,25 @@
5359 context.setContextPath("/");
5460 context.addEventListener(injector.getInstance(GuiceResteasyBootstrapServletContextListener.class));
5561
56
- ServletHolder sh = new ServletHolder(HttpServletDispatcher.class);
5762 context.setInitParameter("resteasy.role.based.security", "true");
63
+ context.setInitParameter("resteasy.providers", DefaultExceptionHandler.class.getName());
5864 context.addFilter(new FilterHolder(injector.getInstance(AuthFilter.class)), "/*", null);
59
- // context.addServlet(DefaultServlet.class, "/*");
60
- context.addServlet(sh, "/*");
6165
66
+ ServletHolder sh = new ServletHolder(HttpServletDispatcher.class);
67
+ // context.addServlet(DefaultServlet.class, "/*");
68
+ context.addServlet(sh, "/");
69
+ ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();
70
+ context.setErrorHandler(errorHandler);
71
+ errorHandler.addErrorPage(HttpResponseCodes.SC_FORBIDDEN, "/login");
72
+ errorHandler.addErrorPage(HttpResponseCodes.SC_NOT_FOUND, "/");
73
+ errorHandler.addErrorPage(javax.ws.rs.NotFoundException.class, "/");
74
+ errorHandler.addErrorPage(javax.ws.rs.ForbiddenException.class, "/");
75
+ errorHandler.addErrorPage(javax.ws.rs.ForbiddenException.class.getCanonicalName(), "/");
76
+ errorHandler.addErrorPage(ErrorPageErrorHandler.GLOBAL_ERROR_PAGE, "/");
77
+
78
+ log.info("Error Handlers: " + context.getErrorHandler());
6279 server.setHandler(context);
80
+
6381 server.start();
6482 server.join();
6583 // rc.packages("net.curisit.securis.services", "org.codehaus.jackson.jaxrs");
....@@ -68,4 +86,39 @@
6886
6987 }
7088
89
+ /**
90
+ * User: Nuwan.N.Bandara
91
+ */
92
+ @Provider
93
+ public static class DefaultExceptionHandler implements ExceptionMapper<Exception> {
94
+
95
+ public DefaultExceptionHandler() {
96
+ log.info("Creating DefaultExceptionHandler ");
97
+ }
98
+
99
+ @Override
100
+ public Response toResponse(Exception e) {
101
+ // For simplicity I am preparing error xml by hand.
102
+ // Ideally we should create an ErrorResponse class to hold the error info.
103
+ StringBuilder response = new StringBuilder("<response>");
104
+ response.append("<status>ERROR</status>");
105
+ response.append("<message>" + e.getMessage() + "</message>");
106
+ response.append("</response>");
107
+ return Response.serverError().entity(response.toString()).type(MediaType.APPLICATION_XML).build();
108
+ }
109
+ }
110
+
71111 }
112
+
113
+/*
114
+ * Constraint constraint = new Constraint(); constraint.setName(Constraint.__FORM_AUTH);; constraint.setRoles(new String[]{"user","admin","moderator"}); constraint.setAuthenticate(true);
115
+ *
116
+ * ConstraintMapping constraintMapping = new ConstraintMapping(); constraintMapping.setConstraint(constraint); constraintMapping.setPathSpec("/*");
117
+ *
118
+ * ConstraintSecurityHandler securityHandler = new ConstraintSecurityHandler(); securityHandler.addConstraintMapping(constraintMapping); HashLoginService loginService = new HashLoginService(); loginService.putUser("username", new
119
+ * Password("password"), new String[] {"user"}); securityHandler.setLoginService(loginService);
120
+ *
121
+ * FormAuthenticator authenticator = new FormAuthenticator("/login", "/login", false); securityHandler.setAuthenticator(authenticator);
122
+ *
123
+ * context.setSecurityHandler(securityHandler);
124
+ */