You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shiro.apache.org by lh...@apache.org on 2010/12/10 01:14:23 UTC
svn commit: r1044181 - in /shiro/trunk: ./
core/src/test/java/org/apache/shiro/test/ samples/spring-client/
samples/spring-client/src/main/resources/ samples/spring/
samples/spring/src/main/java/org/apache/shiro/samples/spring/
samples/spring/src/main/...
Author: lhazlewood
Date: Fri Dec 10 00:14:22 2010
New Revision: 1044181
URL: http://svn.apache.org/viewvc?rev=1044181&view=rev
Log:
Updated sample Spring application to use the correct Spring libraries. Now deploys successfully, although Spring remoting is failing for the Swing app.
Added:
shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/realm/
shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/realm/SaltAwareJdbcRealm.java
Removed:
shiro/trunk/samples/spring/src/main/resources/sample-users.properties
Modified:
shiro/trunk/core/src/test/java/org/apache/shiro/test/AbstractShiroTest.java
shiro/trunk/core/src/test/java/org/apache/shiro/test/ExampleShiroIntegrationTest.java
shiro/trunk/core/src/test/java/org/apache/shiro/test/ExampleShiroUnitTest.java
shiro/trunk/pom.xml
shiro/trunk/samples/spring-client/pom.xml
shiro/trunk/samples/spring-client/src/main/resources/webstart.spring.xml
shiro/trunk/samples/spring/pom.xml
shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/BootstrapDataPopulator.java
shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/web/LoginController.java
shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/web/LogoutController.java
shiro/trunk/samples/spring/src/main/webapp/WEB-INF/applicationContext.xml
shiro/trunk/samples/spring/src/main/webapp/WEB-INF/web.xml
shiro/trunk/samples/spring/src/main/webapp/index.jsp
Modified: shiro/trunk/core/src/test/java/org/apache/shiro/test/AbstractShiroTest.java
URL: http://svn.apache.org/viewvc/shiro/trunk/core/src/test/java/org/apache/shiro/test/AbstractShiroTest.java?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/core/src/test/java/org/apache/shiro/test/AbstractShiroTest.java (original)
+++ shiro/trunk/core/src/test/java/org/apache/shiro/test/AbstractShiroTest.java Fri Dec 10 00:14:22 2010
@@ -12,7 +12,7 @@ import org.junit.AfterClass;
/**
* Abstract test case showing how to use Shiro in testing environments.
*
- * @since 1.1.1
+ * @since 1.2
*/
public abstract class AbstractShiroTest {
Modified: shiro/trunk/core/src/test/java/org/apache/shiro/test/ExampleShiroIntegrationTest.java
URL: http://svn.apache.org/viewvc/shiro/trunk/core/src/test/java/org/apache/shiro/test/ExampleShiroIntegrationTest.java?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/core/src/test/java/org/apache/shiro/test/ExampleShiroIntegrationTest.java (original)
+++ shiro/trunk/core/src/test/java/org/apache/shiro/test/ExampleShiroIntegrationTest.java Fri Dec 10 00:14:22 2010
@@ -11,7 +11,7 @@ import org.junit.Test;
/**
* Simple example test class to be used to show how one might write Shiro-compatible unit tests.
*
- * @since 1.1.1
+ * @since 1.2
*/
public class ExampleShiroIntegrationTest extends AbstractShiroTest {
Modified: shiro/trunk/core/src/test/java/org/apache/shiro/test/ExampleShiroUnitTest.java
URL: http://svn.apache.org/viewvc/shiro/trunk/core/src/test/java/org/apache/shiro/test/ExampleShiroUnitTest.java?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/core/src/test/java/org/apache/shiro/test/ExampleShiroUnitTest.java (original)
+++ shiro/trunk/core/src/test/java/org/apache/shiro/test/ExampleShiroUnitTest.java Fri Dec 10 00:14:22 2010
@@ -1,8 +1,6 @@
package org.apache.shiro.test;
-import org.apache.shiro.mgt.*;
import org.apache.shiro.subject.Subject;
-import org.apache.shiro.mgt.SecurityManager;
import org.junit.After;
import org.junit.Test;
@@ -11,6 +9,8 @@ import static org.easymock.EasyMock.expe
/**
* Simple example test class showing how one may perform unit tests for code that requires Shiro APIs.
+ *
+ * @since 1.2
*/
public class ExampleShiroUnitTest extends AbstractShiroTest {
Modified: shiro/trunk/pom.xml
URL: http://svn.apache.org/viewvc/shiro/trunk/pom.xml?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/pom.xml (original)
+++ shiro/trunk/pom.xml Fri Dec 10 00:14:22 2010
@@ -371,7 +371,7 @@
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
- <version>1.2</version>
+ <version>1.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
Modified: shiro/trunk/samples/spring-client/pom.xml
URL: http://svn.apache.org/viewvc/shiro/trunk/samples/spring-client/pom.xml?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/samples/spring-client/pom.xml (original)
+++ shiro/trunk/samples/spring-client/pom.xml Fri Dec 10 00:14:22 2010
@@ -18,7 +18,8 @@
~ under the License.
-->
<!--suppress osmorcNonOsgiMavenDependency -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>org.apache.shiro.samples</groupId>
@@ -40,7 +41,7 @@
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
- <scope>compile</scope>
+ <scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
@@ -62,48 +63,25 @@
</dependency>
<dependency>
<groupId>org.springframework</groupId>
- <artifactId>spring-aop</artifactId>
- <version>2.5.6</version>
+ <artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
- <artifactId>spring-context-support</artifactId>
- <version>2.5.6</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- <version>2.5.6</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
+ <artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.5.6</version>
- <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
- <version>1.5.6</version>
- <scope>compile</scope>
+ <scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
- <version>1.5.6</version>
- <scope>compile</scope>
+ <scope>runtime</scope>
</dependency>
</dependencies>
@@ -129,19 +107,16 @@
<!--inputTemplate>src/main/jnlp/template.vm</inputTemplate--> <!-- relative to inputTemplateResourcePath -->
<outputFile>shiro.jnlp.jsp</outputFile>
<!-- defaults to launch.jnlp -->
-
<mainClass>org.apache.shiro.samples.spring.ui.WebStartDriver</mainClass>
</jnlp>
-
<sign>
<keystore>jsecurity-sample.jks</keystore>
<storepass>jsecurity</storepass>
<alias>jsecurity</alias>
<verify>false</verify>
</sign>
-
- <!-- BUILDING PROCESS -->
+ <!-- BUILDING PROCESS -->
<pack200>true</pack200>
<verbose>false</verbose>
Modified: shiro/trunk/samples/spring-client/src/main/resources/webstart.spring.xml
URL: http://svn.apache.org/viewvc/shiro/trunk/samples/spring-client/src/main/resources/webstart.spring.xml?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/samples/spring-client/src/main/resources/webstart.spring.xml (original)
+++ shiro/trunk/samples/spring-client/src/main/resources/webstart.spring.xml Fri Dec 10 00:14:22 2010
@@ -34,7 +34,7 @@ http://www.springframework.org/schema/ut
<bean id="sampleManager"
class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
- <property name="serviceUrl" value="http://localhost:9080/shiro/remoting/sampleManager"/>
+ <property name="serviceUrl" value="http://localhost:8080/shiro-samples-spring/remoting/sampleManager"/>
<property name="serviceInterface" value="org.apache.shiro.samples.spring.SampleManager"/>
<property name="remoteInvocationFactory" ref="secureRemoteInvocationFactory"/>
</bean>
Modified: shiro/trunk/samples/spring/pom.xml
URL: http://svn.apache.org/viewvc/shiro/trunk/samples/spring/pom.xml?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/samples/spring/pom.xml (original)
+++ shiro/trunk/samples/spring/pom.xml Fri Dec 10 00:14:22 2010
@@ -45,10 +45,10 @@
<artifactId>maven-jetty-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>
- <contextPath>/shiro</contextPath>
+ <contextPath>/shiro-samples-spring</contextPath>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
- <port>9080</port>
+ <port>8080</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
@@ -175,7 +175,6 @@
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
- <version>1.2</version>
<scope>runtime</scope>
</dependency>
</dependencies>
Modified: shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/BootstrapDataPopulator.java
URL: http://svn.apache.org/viewvc/shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/BootstrapDataPopulator.java?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/BootstrapDataPopulator.java (original)
+++ shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/BootstrapDataPopulator.java Fri Dec 10 00:14:22 2010
@@ -76,13 +76,13 @@ public class BootstrapDataPopulator impl
//The first argument to the hash constructor is the actual value to be hased. The 2nd is the
//salt. In this simple demo scenario, the username and the password are the same, but to clarify the
//distinction, you would see this in practice:
- //new Sha256Hash( <password>, <username> )
+ //new Sha256Hash( <password>, <cryptographically strong randomly generated salt> (not the username!) )
String query = "insert into users values ('user1', '" + new Sha256Hash("user1", "user1").toBase64() + "' )";
jdbcTemplate.execute(query);
log.debug("Created user1.");
//password is 'user2' SHA hashed and base64 encoded:
- query = "insert into users values ( 'user2', '" + new Sha256Hash("user2", "user2").toBase64() + "' )";
+ query = "insert into users values ( 'user2', '" + new Sha256Hash("user2", "user2").toBase64() + "' )";
jdbcTemplate.execute(query);
log.debug("Created user2.");
Added: shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/realm/SaltAwareJdbcRealm.java
URL: http://svn.apache.org/viewvc/shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/realm/SaltAwareJdbcRealm.java?rev=1044181&view=auto
==============================================================================
--- shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/realm/SaltAwareJdbcRealm.java (added)
+++ shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/realm/SaltAwareJdbcRealm.java Fri Dec 10 00:14:22 2010
@@ -0,0 +1,103 @@
+package org.apache.shiro.samples.spring.realm;
+
+import org.apache.shiro.authc.*;
+import org.apache.shiro.realm.jdbc.JdbcRealm;
+import org.apache.shiro.util.JdbcUtils;
+import org.apache.shiro.util.SimpleByteSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ * Realm that exists to support salted credentials. The JdbcRealm implementation needs to be updated in a future
+ * Shiro release to handle this.
+ */
+public class SaltAwareJdbcRealm extends JdbcRealm {
+
+ private static final Logger log = LoggerFactory.getLogger(SaltAwareJdbcRealm.class);
+
+ @Override
+ protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
+ UsernamePasswordToken upToken = (UsernamePasswordToken) token;
+ String username = upToken.getUsername();
+
+ // Null username is invalid
+ if (username == null) {
+ throw new AccountException("Null usernames are not allowed by this realm.");
+ }
+
+ Connection conn = null;
+ AuthenticationInfo info = null;
+ try {
+ conn = dataSource.getConnection();
+
+ String password = getPasswordForUser(conn, username);
+
+ if (password == null) {
+ throw new UnknownAccountException("No account found for user [" + username + "]");
+ }
+
+ SimpleAuthenticationInfo saInfo = new SimpleAuthenticationInfo(username, password, getName());
+ /**
+ * This (very bad) example uses the username as the salt in this sample app. DON'T DO THIS IN A REAL APP!
+ *
+ * Salts should not be based on anything that a user could enter (attackers can exploit this). Instead
+ * they should ideally be cryptographically-strong randomly generated numbers.
+ */
+ saInfo.setCredentialsSalt(new SimpleByteSource(username));
+
+ info = saInfo;
+
+ } catch (SQLException e) {
+ final String message = "There was a SQL error while authenticating user [" + username + "]";
+ if (log.isErrorEnabled()) {
+ log.error(message, e);
+ }
+
+ // Rethrow any SQL errors as an authentication exception
+ throw new AuthenticationException(message, e);
+ } finally {
+ JdbcUtils.closeConnection(conn);
+ }
+
+ return info;
+ }
+
+ private String getPasswordForUser(Connection conn, String username) throws SQLException {
+
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ String password = null;
+ try {
+ ps = conn.prepareStatement(authenticationQuery);
+ ps.setString(1, username);
+
+ // Execute query
+ rs = ps.executeQuery();
+
+ // Loop over results - although we are only expecting one result, since usernames should be unique
+ boolean foundResult = false;
+ while (rs.next()) {
+
+ // Check to ensure only one row is processed
+ if (foundResult) {
+ throw new AuthenticationException("More than one user row found for user [" + username + "]. Usernames must be unique.");
+ }
+
+ password = rs.getString(1);
+
+ foundResult = true;
+ }
+ } finally {
+ JdbcUtils.closeResultSet(rs);
+ JdbcUtils.closeStatement(ps);
+ }
+
+ return password;
+ }
+
+}
Modified: shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/web/LoginController.java
URL: http://svn.apache.org/viewvc/shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/web/LoginController.java?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/web/LoginController.java (original)
+++ shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/web/LoginController.java Fri Dec 10 00:14:22 2010
@@ -21,7 +21,6 @@ package org.apache.shiro.samples.spring.
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
-import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.BindException;
@@ -44,12 +43,10 @@ public class LoginController extends Sim
LoginCommand command = (LoginCommand) cmd;
- Subject subject = SecurityUtils.getSubject();
-
UsernamePasswordToken token = new UsernamePasswordToken(command.getUsername(), command.getPassword());
try {
- subject.login(token);
+ SecurityUtils.getSubject().login(token);
} catch (AuthenticationException e) {
log.debug("Error authenticating.", e);
errors.reject("error.invalidLogin", "The username or password was not correct.");
Modified: shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/web/LogoutController.java
URL: http://svn.apache.org/viewvc/shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/web/LogoutController.java?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/web/LogoutController.java (original)
+++ shiro/trunk/samples/spring/src/main/java/org/apache/shiro/samples/spring/web/LogoutController.java Fri Dec 10 00:14:22 2010
@@ -18,15 +18,12 @@
*/
package org.apache.shiro.samples.spring.web;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
+import org.apache.shiro.SecurityUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.subject.Subject;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
/**
* Controller responsible for logging out the current user by invoking
@@ -37,16 +34,7 @@ import org.apache.shiro.subject.Subject;
public class LogoutController extends AbstractController {
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
- Subject subject = SecurityUtils.getSubject();
- if (subject != null) {
- subject.logout();
- }
-
- HttpSession session = request.getSession(false);
- if( session != null ) {
- session.invalidate();
- }
-
+ SecurityUtils.getSubject().logout();
return new ModelAndView("redirect:login");
}
}
\ No newline at end of file
Modified: shiro/trunk/samples/spring/src/main/webapp/WEB-INF/applicationContext.xml
URL: http://svn.apache.org/viewvc/shiro/trunk/samples/spring/src/main/webapp/WEB-INF/applicationContext.xml?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/samples/spring/src/main/webapp/WEB-INF/applicationContext.xml (original)
+++ shiro/trunk/samples/spring/src/main/webapp/WEB-INF/applicationContext.xml Fri Dec 10 00:14:22 2010
@@ -19,10 +19,8 @@
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- Sample RDBMS data source that would exist in any application - not Shiro related. -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
@@ -65,17 +63,16 @@
<!-- Used by the SecurityManager to access security data (users, roles, etc).
Many other realm implementations can be used too (PropertiesRealm,
LdapRealm, etc. -->
- <bean id="jdbcRealm" class="org.apache.shiro.realm.jdbc.JdbcRealm">
+ <bean id="jdbcRealm" class="org.apache.shiro.samples.spring.realm.SaltAwareJdbcRealm">
<property name="name" value="jdbcRealm"/>
<property name="dataSource" ref="dataSource"/>
<property name="credentialsMatcher">
<!-- The 'bootstrapDataPopulator' Sha256 hashes the password
(using the username as the salt) then base64 encodes it: -->
- <bean class="org.apache.shiro.authc.credential.Sha256CredentialsMatcher">
+ <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
+ <property name="hashAlgorithmName" value="SHA-256"/>
<!-- true means hex encoded, false means base64 encoded -->
<property name="storedCredentialsHexEncoded" value="false"/>
- <!-- We salt the password using the username, the most common practice: -->
- <property name="hashSalted" value="true"/>
</bean>
</property>
</bean>
@@ -125,8 +122,14 @@
</property> -->
<property name="filterChainDefinitions">
<value>
- /s/index = authc
- /s/shiro.jnlp = authc, user
+ /favicon.ico = anon
+ /logo.png = anon
+ /shiro.css = anon
+ /s/login = anon
+ # allow WebStart to pull the jars for the swing app:
+ /*.jar = anon
+ # everything else requires authentication:
+ /** = authc
</value>
</property>
</bean>
Modified: shiro/trunk/samples/spring/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/shiro/trunk/samples/spring/src/main/webapp/WEB-INF/web.xml?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/samples/spring/src/main/webapp/WEB-INF/web.xml (original)
+++ shiro/trunk/samples/spring/src/main/webapp/WEB-INF/web.xml Fri Dec 10 00:14:22 2010
@@ -28,9 +28,7 @@
================================================================== -->
<context-param>
<param-name>contextConfigLocation</param-name>
- <param-value>
- /WEB-INF/applicationContext.xml
- </param-value>
+ <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!--
@@ -59,18 +57,17 @@
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
+ <init-param>
+ <param-name>targetFilterLifecycle</param-name>
+ <param-value>true</param-value>
+ </init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
- <url-pattern>/s/*</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>shiroFilter</filter-name>
- <url-pattern>/remoting/*</url-pattern>
+ <url-pattern>/*</url-pattern>
</filter-mapping>
-
<!-- ==================================================================
Servlets
================================================================== -->
Modified: shiro/trunk/samples/spring/src/main/webapp/index.jsp
URL: http://svn.apache.org/viewvc/shiro/trunk/samples/spring/src/main/webapp/index.jsp?rev=1044181&r1=1044180&r2=1044181&view=diff
==============================================================================
--- shiro/trunk/samples/spring/src/main/webapp/index.jsp (original)
+++ shiro/trunk/samples/spring/src/main/webapp/index.jsp Fri Dec 10 00:14:22 2010
@@ -16,8 +16,8 @@
~ specific language governing permissions and limitations
~ under the License.
--%>
+<%@ page session="false" %>
<%@ include file="/WEB-INF/resources/include.jsp" %>
-
<html>
<head>
<meta http-equiv="Refresh" content="0; url=<c:url value="/s/login"/>">