Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/delibero.git

Started to integrate Shiro authentication.

AuthorDave Jarvis <email>
Date2015-01-21 00:36:14 GMT-0800
Commitcb6e953e946b5b644f4bcf671e1544ea419b757a
Parent9a48331
resources/auth.properties
post_auth = org.apache.shiro.web.filter.authc.FormAuthenticationFilter
-#authc.loginUrl = /app/login
-#authc.successUrl = /app/home
+get_auth.loginUrl = /app/login
+get_auth.successUrl = /app/home
#authc.usernameParam = account
#authc.passwordParam = password
[urls]
-#/app/login = authc
+/app/new = get_auth
#/app/edit/** = authc
resources/database/new.xml
+<?xml version="1.0" encoding="utf-8"?>
+<policy>
+</policy>
+
source/java/to/discuss/Main.java
/**
* Returns the name of the package that contains the servlets.
+ *
+ * @return A non-null string.
*/
private String getPackageName() {
source/java/to/discuss/servlet/Account.java
* Main HTTP request handler for /app/account.
*/
-@SuppressWarnings("serial")
public class Account extends App {
public Account() {
source/java/to/discuss/servlet/App.java
import javax.servlet.ServletException;
-
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
-
-import org.apache.shiro.subject.Subject;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.AuthenticationToken;
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.apache.shiro.web.util.SavedRequest;
-import org.apache.shiro.web.util.WebUtils;
import to.discuss.Base;
* Main HTTP request handler for /app.
*/
-@SuppressWarnings("serial")
public class App extends HttpServlet implements Base {
- private static final Logger LOG = LoggerFactory.getLogger( App.class );
-
- private HttpServletRequest request;
- private HttpServletResponse response;
-
- private int responseStatus = SC_OK;
+ protected static final Logger LOG = LoggerFactory.getLogger( App.class );
public App() {
HttpServletResponse response ) throws ServletException
{
- setRequest( request );
- setResponse( response );
-
try {
- sendHeader();
- sendContent();
+ // Ensure the finally block is called if this throws an exception.
+ if( preprocess( request, response ) ) {
+ sendHeader( response );
+ sendContent( response );
+ }
}
catch( Exception e ) {
throw new ServletException( e );
+ }
+ finally {
+ postprocess( request, response );
}
+ }
+
+ /**
+ * Called before the header is sent, but after the request and response
+ * variable have been set. This will return false to indicate that
+ * content should not be sent (usually in the case of a redirect).
+ *
+ * @return true Send the header and content (via XSL transformation).
+ */
+ protected boolean preprocess(
+ HttpServletRequest request,
+ HttpServletResponse response ) throws ServletException {
+
+ return true;
+ }
+
+ /**
+ * Called after the content is sent. This is guaranteed to be called, even
+ * if the servlet throws an exception during preprocessing.
+ */
+ protected void postprocess(
+ HttpServletRequest request,
+ HttpServletResponse response ) throws ServletException {
}
/**
* Writes the header information.
*/
- protected void sendHeader() throws Exception {
- getResponse().setContentType( getContentType() );
- getResponse().setStatus( getResponseStatus() );
+ protected void sendHeader( HttpServletResponse response ) throws Exception {
+ response.setContentType( getContentType() );
+ response.setStatus( getResponseStatus() );
}
/**
* Returns the default content type.
*
* @return "text/html"
*/
protected String getContentType() {
return "text/html";
+ }
+
+ /**
+ * Returns the default response status.
+ *
+ * @return 200 OK
+ */
+ protected int getResponseStatus() {
+ return SC_OK;
}
* content to the client.
*/
- private void sendContent() throws Exception {
- //Subject user = SecurityUtils.getSubject();
-
+ private void sendContent( HttpServletResponse response ) throws Exception {
Transformer transformer = getTransformer();
transformer.setOutputProperty( OutputKeys.ENCODING, getEncoding() );
- transformer.transform( getDocument(), getResultStream() );
+ transformer.transform( getDocument(), getResultStream( response ) );
}
- protected Result getResultStream() throws IOException {
- return new StreamResult( getResponse().getOutputStream() );
+ protected Result getResultStream( HttpServletResponse response )
+ throws IOException {
+ return new StreamResult( response.getOutputStream() );
}
public String getAppName() {
return getClass().getSimpleName().toLowerCase();
- }
-
- private void setRequest( HttpServletRequest request ) {
- this.request = request;
- }
-
- private HttpServletRequest getRequest() {
- return this.request;
- }
-
- private void setResponse( HttpServletResponse response ) {
- this.response = response;
- }
-
- private HttpServletResponse getResponse() {
- return this.response;
- }
-
- /**
- * Return HTTP response status to return to the client.
- *
- * @return An HTTP status code (200 OK by default).
- */
- private int getResponseStatus() {
- return this.responseStatus;
- }
-
- /**
- * Set HTTP response status to return to the client.
- *
- * @param responseStatus The status code to send to the client.
- */
- private void setResponseStatus( int responseStatus ) {
- this.responseStatus = responseStatus;
}
}
source/java/to/discuss/servlet/AuthenticatedApp.java
+/**
+ * MIT License
+ *
+ * Copyright 2015 White Magic Software, Ltd.
+ */
+package to.discuss.servlet;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.shiro.subject.Subject;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.web.util.SavedRequest;
+import org.apache.shiro.web.util.WebUtils;
+
+/**
+ *
+ */
+public class AuthenticatedApp extends App {
+ public AuthenticatedApp() {
+ }
+
+ @Override
+ protected boolean preprocess(
+ HttpServletRequest request,
+ HttpServletResponse response ) throws ServletException {
+ Subject user = SecurityUtils.getSubject();
+
+ return super.preprocess( request, response );
+ }
+}
+
source/java/to/discuss/servlet/Discuss.java
* Main HTTP request handler for /app/discuss.
*/
-@SuppressWarnings("serial")
public class Discuss extends App {
public Discuss() {
source/java/to/discuss/servlet/Edit.java
* Main HTTP request handler for /app/edit.
*/
-@SuppressWarnings("serial")
public class Edit extends App {
public Edit() {
source/java/to/discuss/servlet/Flag.java
* Main HTTP request handler for /app/flag.
*/
-@SuppressWarnings("serial")
public class Flag extends App {
public Flag() {
source/java/to/discuss/servlet/Home.java
* Main HTTP request handler for /app/home.
*/
-@SuppressWarnings("serial")
public class Home extends App {
public Home() {
source/java/to/discuss/servlet/Login.java
* Main HTTP request handler for /app/login.
*/
-@SuppressWarnings("serial")
public class Login extends App {
public Login() {
source/java/to/discuss/servlet/Logout.java
* Main HTTP request handler for /app/logout.
*/
-@SuppressWarnings("serial")
public class Logout extends App {
public Logout() {
source/java/to/discuss/servlet/New.java
/**
- * Main HTTP request handler for /app/new.
+ * Main HTTP request handler for /app/new. This class requires a context
+ * to determine the correct "new" object to create.
*/
-@SuppressWarnings("serial")
-public class New extends App {
+public class New extends AuthenticatedApp {
public New() {
}
source/java/to/discuss/servlet/Proposal.java
* Main HTTP request handler for /app/proposal.
*/
-@SuppressWarnings("serial")
public class Proposal extends App {
public Proposal() {
source/java/to/discuss/servlet/Refute.java
* Main HTTP request handler for /app/refute.
*/
-@SuppressWarnings("serial")
public class Refute extends App {
public Refute() {
source/java/to/discuss/servlet/Resources.java
* Main HTTP request handler for /app/resources.
*/
-@SuppressWarnings("serial")
public class Resources extends App {
public Resources() {
source/java/to/discuss/servlet/Success.java
* Main HTTP request handler for /app/success.
*/
-@SuppressWarnings("serial")
public class Success extends App {
public Success() {
source/java/to/discuss/servlet/Support.java
* Main HTTP request handler for /app/support.
*/
-@SuppressWarnings("serial")
public class Support extends App {
public Support() {
source/java/to/discuss/servlet/Synopsis.java
* Main HTTP request handler for /app/synopsis.
*/
-@SuppressWarnings("serial")
public class Synopsis extends App {
public Synopsis() {
source/java/to/discuss/servlet/Tags.java
* Main HTTP request handler for /app/tags.
*/
-@SuppressWarnings("serial")
public class Tags extends App {
public Tags() {
Delta96 lines added, 83 lines removed, 13-line increase