安全性是超越应用程序功能特性的一个关注点,所以最好的做法是将安全和应用分开考虑。
Spring Security
一种基于Spring AOP和Servlet过滤器的安全框架。(Servlet过滤器是AOP的一种原始形式)
是为基于Spring的应用程序提供说明性安全保护的框架,它提供全面的安全性解决方案,同时在web请求级和
方法调用级处理身份确认和授权。
组件:
安全拦截器 认证管理器
访问决策管理器--为一个已经通过身份验证的用户确定访问权限
运行身份管理器
调用后管理器
认证管理器:
<bean id="authenticationManager"
class="org.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref local="daoAuthenticationProvider" />
<ref local="anonymousAuthenticationProvider" />
</list>
</property>
</bean>
providers.dao.DaoAuthenticationProvider----面向数据库的身份验证
<bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userService" />
</bean>
<bean id="userService" class="com.sitechasia.ebiz.security.service.impl.UserServiceImpl"/>
访问决策管理器:
<bean id="accessDecisionManager"
class="org.acegisecurity.vote.AffirmativeBased">
<property name="allowIfAllAbstainDecisions" value="false" />//所有投票者弃权的话拒绝访问
<property name="decisionVoters">
<list>
<bean class="com.sitechasia.ebiz.security.vote.PermissionVoter" />
<bean class="org.acegisecurity.vote.AuthenticatedVoter" />
</list>
</property>
</bean>
认证过滤器:
<bean id="authenticationProcessingFilter"
class="com.sitechasia.ebiz.security.web.filter.AuthenticationProcessingFilter">
<property name="authenticationManager"
ref="authenticationManager" />
<property name="authenticationFailureUrl"
value="/login.jsp?login_error=1" />//认证失败
<property name="defaultTargetUrl"
value="/operServlet/defaultUrl" />//认证成功
<property name="filterProcessesUrl"
value="/j_acegi_security_check.do" />//经过此过滤器的请求
<property name="isUpdateLoginTime" value="false" />
</bean>
web.xml
<servlet>
<servlet-name>defaultUrl</servlet-name>
<servlet-class>
com.sitechasia.ebiz.opermanage.opersv.servlet.DefaultTargetUrlServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>defaultUrl</servlet-name>
<url-pattern>/operServlet/defaultUrl</url-pattern>
</servlet-mapping>