<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:config/application*.xml
</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:config/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>arch.root</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--
- Publishes events for session creation and destruction through the application
- context. Optional unless concurrent session control is being used.
-->
<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
application-sccurity.xml
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<!--
Web/HTTP安全 - 最复杂的部分。设置过滤器和相关的服务bean来应用框架验证机制, 保护URL,渲染登录和错误页面还有更多。
业务类(方法)安全 - 可选的安全服务层。
AuthenticationManager - 通过框架的其它部分,处理认证请求。
AccessDecisionManager - 提供访问的决定,适用于web以及方法的安全。一个默认的主体会被注册,但是你也可以选择自定义一个,使用正常的spring bean语法进行声明。
AuthenticationProviders - 验证管理器验证用户的机制。 该命名空间提供几种标准选项,意味着使用传统语法添加自定义bean。
UserDetailsService - 密切相关的认证供应器,但往往也需要由其他bean需要。
-->
<!-- URL保护 web安全服务配置
auto-config="true" 意味着一此服务已经自动添加进来了,如:表单登录和"remember-me"服务 相当于以下配置
<http>
<form-login />
<http-basic />
<logout />
</http>
use-expressions="true" 表示在计算角色时使用表达式 此时 直接写ROLE_USER 是不支持的
auto-config="true" 包含的过滤器如下:
1 org.springframework.security.context.HttpSessionContextIntegrationFilter
位于过滤器链顶端 作用:(1) 判断session是否存在SecurityContext 如果有取出存放在SecurityContextHolder 中
如果没有就创建一个共Spring security 后面使用
(2) 执行完毕后, 清空SecurytContextHolder 中的内容,SecurytContext 采用ThreadLocal 的形式存放在SecurityContextHolder 中
2 org.springframework.security.ui.logout.LogoutFilter
处理 /j_spring_security_logout 注销请求 清空session和SecurityContextHolder 结合 RememberMe 清空Cookie
3 org.springframework.security.ui.webapp.AuthenticationProcessingFilter
处理登录请求 /j_spring_security_check 登录表单提交请求 验证用户有的合法性
4 org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter
处理/spring_security_login请求,生成一个默认的登录界面
5 org.springframework.security.ui.basicauth.BasicProcessingFilter
进行 HttpBasic 认证
6 org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter
包装客户端请求
7 org.springframework.security.ui.rememberme.RememberMeProcessingFilter
提供Cookie 功能
8 org.springframework.security.providers.anonymous.AnonymousProcessingFilter
匿名访问的处理 分配匿名访问用户的权限
9 org.springframework.security.ui.ExceptionTranslationFilter
捕获FilterSecurityInterceptor抛出的异常,Error画面定向
10 SessionFixationProtectionFilter
防止session固化攻击
11 org.springframework.security.intercept.web.FilterSecurityInterceptor
是所有过滤器的控制中心
1 用户尚未登录 抛出 AuthenticationCredentialsNotFoundException 尚未认证
2 用户已经登录,但没有访问权限 抛出 AccessDeniedException 拒绝访问
3 如果已登录,有权限放行
-->
<http auto-config="true">
<intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
<!--
<form-login login-page='/login.jsp' login-processing-url="/login" authentication-failure-url="/error.jsp"
default-target-url='/common/common.jsp'
always-use-default-target='true' />
-->
<!--
自定义登录页面
<intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page='/login.jsp'/>
也可以覆盖auto-config=true的配置
<http auto-config='true'>
<intercept-url pattern="/css/**" filters="none"/>
<intercept-url pattern="/login.jsp*" filters="none"/>
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page='/login.jsp'/>
</http>
<remember-me />
<session-management invalid-session-url="/timeout.jsp">
<concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
</session-management>
-->
</http>
<!-- 用户认证管理 用户信息也可能通过user-service 的properties 属性 -->
<authentication-manager>
<authentication-provider>
<!-- <jdbc-user-service data-source-ref="dataSource"/> 使用数据库认证 -->
<user-service>
<user name="jimi" password="jimi" authorities="ROLE_USER,ROLE_ADMIN"/>
<user name="bob" password="bob" authorities="ROLE_USER"/>
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>