Dave Jarvis' Repositories

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

Added authentication-aware log out link.

AuthorDave Jarvis <email>
Date2015-01-23 01:43:42 GMT-0800
Commit76975c8c5fcbbb19802d9bc4d3a9afa05ab336b2
Parent47f4b9b
source/java/to/discuss/servlet/App.java
import javax.xml.transform.Transformer;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
+
import to.discuss.Base;
import to.discuss.util.AppURIResolver;
private void sendContent( HttpServletResponse response ) throws Exception {
Transformer transformer = getTransformer();
+ setParameters( transformer );
transformer.setOutputProperty( OutputKeys.ENCODING, getEncoding() );
transformer.transform( getDocument(), getResultStream( response ) );
+ }
+
+ protected void setParameters( Transformer transformer ) {
+ Subject user = SecurityUtils.getSubject();
+
+ transformer.setParameter( "P_AUTHENTICATED", user.isAuthenticated() );
}
source/java/to/discuss/servlet/Login.java
import org.apache.shiro.subject.Subject;
import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
response.sendRedirect( saved.getRequestUrl() );
}
+ }
+ catch( AuthenticationException ae ) {
+ // Login again.
+ super.doGet( request, response );
}
catch( Exception e ) {
source/java/to/discuss/servlet/Logout.java
package to.discuss.servlet;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
+
/**
* Main HTTP request handler for /app/logout.
*/
public class Logout extends App {
public Logout() {
+ }
+
+ /**
+ * Log the user out and redirect back to the home page.
+ */
+ @Override
+ protected boolean preprocess(
+ HttpServletRequest request,
+ HttpServletResponse response ) throws ServletException {
+
+ try {
+ SecurityUtils.getSubject().logout();
+ response.sendRedirect( "/app/home" );
+ }
+ catch( Exception e ) {
+ throw new ServletException( e );
+ }
+
+ return false;
}
}
source/xsl/common.xsl
| Copyright 2014 White Magic Software, Inc.
+-->
-<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:stylesheet version="2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
<!-- Application context that responds to HTTP requests. -->
-<xsl:param name="CONTEXT" select="'/app'"/>
+<xsl:param name="P_CONTEXT" select="'/app'"/>
+
+<!-- Set to true if the user is authenticated. -->
+<xsl:param name="P_AUTHENTICATED" select="false()"/>
<xsl:template match="/">
<xsl:template match="*[@id]">
<div class="{local-name()}"><a
- href="{$CONTEXT}/{local-name()}/{@id}"><xsl:apply-templates
+ href="{$P_CONTEXT}/{local-name()}/{@id}"><xsl:apply-templates
select="node()|*"/></a></div>
</xsl:template>
<xsl:template match="menu" mode="menu">
- <ul class="menu"><xsl:apply-templates mode="menu"/></ul>
+ <ul class="menu">
+ <xsl:apply-templates mode="menu"/>
+ </ul>
+</xsl:template>
+
+<!-- If the user is authenticated, then provide a log out link. -->
+<xsl:template match="item[@id = '15']" mode="menu" priority="1">
+ <xsl:if test="$P_AUTHENTICATED">
+ <li class="item">
+ <a href="{$P_CONTEXT}/{@link}"><xsl:apply-templates/></a>
+ </li>
+ </xsl:if>
</xsl:template>
<xsl:template match="item" mode="menu">
<li class="item">
- <a href="{$CONTEXT}/{@link}"><xsl:apply-templates/></a>
+ <a href="{$P_CONTEXT}/{@link}"><xsl:apply-templates/></a>
</li>
</xsl:template>
source/xsl/login.xsl
<xsl:template match="policy">
- <form id="login" method="post" action="{$CONTEXT}/login" autocomplete="off">
+ <form id="login" method="post" action="{$P_CONTEXT}/login" autocomplete="off">
<fieldset form="login" name="login">
<input type="text" autocomplete="off" id="account" name="account"
source/xsl/menu/menu.xml
</items>
<menu id="1">
- <item id="7"/> <item id="8"/> <item id="12"/>
+ <item id="7"/> <item id="8"/> <item id="12"/> <item id="15"/>
</menu>
<menu id="2">
<item id="1"/> <item id="3"/> <item id="4"/> <item id="5"/> <item id="6"/>
- <item id="7"/>
+ <item id="7"/> <item id="15"/>
</menu>
<menu id="3">
<item id="1"/> <item id="2"/> <item id="4"/> <item id="5"/> <item id="6"/>
- <item id="7"/> <item id="9"/> <item id="10"/>
+ <item id="7"/> <item id="9"/> <item id="10"/> <item id="15"/>
</menu>
<menu id="4">
<item id="1"/> <item id="2"/> <item id="3"/> <item id="5"/> <item id="6"/>
- <item id="7"/> <item id="9"/> <item id="10"/>
+ <item id="7"/> <item id="9"/> <item id="10"/> <item id="15"/>
</menu>
<menu id="5">
<item id="1"/> <item id="2"/> <item id="3"/> <item id="4"/> <item id="6"/>
- <item id="7"/> <item id="12"/>
+ <item id="7"/> <item id="12"/> <item id="15"/>
</menu>
<menu id="6">
<item id="1"/> <item id="2"/> <item id="3"/> <item id="4"/> <item id="5"/>
- <item id="7"/> <item id="9"/> <item id="10"/>
+ <item id="7"/> <item id="9"/> <item id="10"/> <item id="15"/>
</menu>
<menu id="7">
- <item id="1"/>
+ <item id="1"/> <item id="15"/>
</menu>
<menu id="8">
- <item id="1"/>
+ <item id="1"/> <item id="15"/>
</menu>
<menu id="11">
<item id="1"/> <item id="3"/> <item id="4"/> <item id="4"/> <item id="5"/>
<item id="6"/> <item id="7"/> <item id="9"/> <item id="10"/>
- <item id="13"/>
+ <item id="13"/> <item id="15"/>
</menu>
<menu id="14">
- <item id="1"/>
+ <item id="1"/> <item id="15"/>
</menu>
<menu id="15">
source/xsl/menu/menu.xsl
</xsl:template>
+<!-- The ID is required so that the menu can change dynamically. -->
<xsl:template match="item">
- <item>
+ <item id="{@id}">
<xsl:attribute name="link" select="key( 'items', @id )/@link"/>
<xsl:value-of select="key( 'items', @id )"/>
Delta75 lines added, 17 lines removed, 58-line increase