spring-security3 配置和使用

来源:互联网 发布:淘宝售后服务 编辑:程序博客网 时间:2024/05/14 07:34

web.xml配置

<context-param>

  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:applicationContext-*.xml</param-value>
 </context-param>
 <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>
 </filter-mapping>


application-security.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.  <beans:beans xmlns="http://www.springframework.org/schema/security"  
  3.     xmlns:beans="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  6.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  7.     http://www.springframework.org/schema/security   
  8.     http://www.springframework.org/schema/security/spring-security-3.0.xsd">  
  9.   
  10.     <!-- auto-config = true 则使用from-login. 如果不使用该属性 则默认为http-basic(没有session).    
  11.         access-denied-page:出错后跳转到的错误页面;   
  12.     -->  
  13.     <http auto-config="true" access-denied-page="/common/403.jsp">  
  14.         <!-- intercept-url:拦截器,可以设定哪些路径需要哪些权限来访问. filters=none 不使用过滤,也可以理解为忽略
  15.  只有ROLE_USER角色的用户才能访问 -->  
  16.         <intercept-url pattern="/index.jsp" access="ROLE_USER" />  
  17.         <intercept-url pattern="/login.jsp" filters="none" />  
  18.         <intercept-url pattern="/common/**" filters="none" />  
  19.         <intercept-url pattern="/script/**" filters="none" />  
  20.         <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />  
  21.         <intercept-url pattern="/user.jsp" access="ROLE_USER" />  
  22.            
  23.         <!-- session-management是针对session的管理. 这里可以不配置. 如有需求可以配置. -->  
  24.         <!-- id登陆唯一. 后登陆的账号会挤掉第一次登陆的账号  error-if-maximum-exceeded="true" 禁止2次登陆;   
  25.             session-fixation-protection="none" 防止伪造sessionid攻击. 用户登录成功后会销毁用户当前的session.   
  26.             创建新的session,并把用户信息复制到新session中.   
  27.          -->  
  28.         <session-management session-fixation-protection="none">  
  29.             <concurrency-control/>  
  30.         </session-management>  
  31.            
  32.         <!-- login-page:默认指定的登录页面. authentication-failure-url:出错后跳转页面. default-target-url:成功登陆后跳转页面 -->  
  33.         <form-login login-page="/login.jsp"  
  34.             authentication-failure-url="/common/403.jsp"  
  35.             default-target-url="/admin.jsp" />  
  36.         <!-- logout-success-url:成功注销后跳转到的页面; -->  
  37.         <logout logout-success-url="/login.jsp"/>  
  38.         <http-basic />  
  39.            
  40.     </http>  
  41.   
  42.     <!-- 权限管理操作 -->  
  43.     <authentication-manager>  
  44.         <authentication-provider>  
  45.           <!-- 把密码和盐值指定的内容合并在一起,如用户名是tom,密码是123456的用户在数据库中存放的密码应为“123456{tom}”的md5值-->      
  46.             <password-encoder hash="md5">  
  47.                 <salt-source user-property="username"/>  
  48.             </password-encoder>  
  49.              -->  
  50.              <!-- 注入dataSource验证数据库中的用户名.密码.账号状态.和权限相关; -->  
  51.             <jdbc-user-service data-source-ref="dataSource"  
  52.                 users-by-username-query="select username,password,enabled from user where username = ? and enabled = 1"  
  53.                 authorities-by-username-query="select u.username,r.name from user u join user_role ur on u.uid = ur.uid join role r on r.rid = ur.rid where u.username = ?" />  
  54.             <!--   
  55.                 使用固定的用户名和密码及权限来做验证.    
  56.                 <user-service>  
  57.                 <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />  
  58.                 <user name="user" password="user" authorities="ROLE_USER" />  
  59.                 </user-service>  
  60.             -->  
  61.         </authentication-provider>  
  62.     </authentication-manager>  
  63. 防止一个用户重复登录好几次-第二次登录会让第一次登录失效。 通常我们更想防止第二次登录,这时候我们可以使用

        <session-management>        <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />    </session-management>     

  64. </beans:beans>  


获取当前用户信息
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();if (principal instanceof UserDetails) {  String username = ((UserDetails)principal).getUsername();} else {  String username = principal.toString();}


登陆后操作
public class AuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {

登陆是操作(如添加验证码)
public class validateCodeUsernamePasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter{