zoukankan      html  css  js  c++  java
  • SpringSecurity相关配置【SpringSecurityConfig】

    SpringSecurity的配置相对来说有些复杂,如果是完整的bean配置,则需要配置大量的bean,所以xml配置时使用了命名空间来简化配置,同样,spring为我们提供了一个抽象类WebSecurityConfigurerAdapter和一个注解@EnableWebMvcSecurity,达到同样减少bean配置的目的,如下:

    applicationContext-SpringSecurityConfig.xml

    Xml代码  收藏代码
    1. <http security="none" pattern="/static/**" />  
    2.     <http security="none" pattern="/**/*.jsp" />  
    3.   
    4.     <http auto-config='true' access-decision-manager-ref="accessDecisionManager" access-denied-page="/login"  
    5.         use-expressions="true">  
    6.         <logout logout-url="/logout" invalidate-session="true"  
    7.             logout-success-url="/login" />  
    8.   
    9.   
    10.         <form-login login-page="/login" authentication-failure-url="/login?error=1"  
    11.             login-processing-url="/j_spring_security_check" password-parameter="j_password"  
    12.             username-parameter="j_username" />  
    13.   
    14.   
    15.         <intercept-url pattern="/**/*.do*" access="hasRole('ROLE_USER')" />  
    16.         <intercept-url pattern="/**/*.htm" access="hasRole('ROLE_ADMIN')" />  
    17.   
    18.         <session-management session-fixation-protection="changeSessionId">  
    19.             <concurrency-control max-sessions="1"  
    20.                 expired-url="/access/sameLogin.do" />  
    21.         </session-management>  
    22.   
    23.         <remember-me key="webmvc#FD637E6D9C0F1A5A67082AF56CE32485"  
    24.             remember-me-parameter="remember-me" />  
    25.     </http>  
    26.   
    27.     <!-- 启用表达式 为了后面的投票器做准备 -->  
    28.     <beans:bean  
    29.         class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler"  
    30.         id="expressionHandler" />  
    31.     <beans:bean  
    32.         class="org.springframework.security.web.access.expression.WebExpressionVoter"  
    33.         id="expressionVoter">  
    34.         <beans:property name="expressionHandler" ref="expressionHandler" />  
    35.     </beans:bean>  
    36.   
    37.     <!-- Automatically receives AuthenticationEvent messages -->  
    38.     <beans:bean id="loggerListener"  
    39.         class="org.springframework.security.authentication.event.LoggerListener" />  
    40.     <beans:bean id="authorizationListener"  
    41.         class="org.springframework.security.access.event.LoggerListener" />  
    42.   
    43.     <!-- 认证管理器,使用自定义的UserDetailsService,并对密码采用md5加密 -->  
    44.     <authentication-manager>  
    45.         <authentication-provider user-service-ref="userService">  
    46.             <password-encoder hash="md5" />  
    47.         </authentication-provider>  
    48.     </authentication-manager>  
    49.   
    50.   
    51.   
    52.   
    53.   
    54.     <beans:bean id="userService" class="web.security.CP_UserDetailsService" />  
    55.   
    56.     <beans:bean id="accessDecisionManager"  
    57.         class="org.springframework.security.access.vote.AffirmativeBased">  
    58.         <beans:property name="decisionVoters">  
    59.             <beans:list>  
    60.                 <beans:bean class="org.springframework.security.access.vote.RoleVoter" />  
    61.                 <beans:bean  
    62.                     class="org.springframework.security.access.vote.AuthenticatedVoter" />  
    63.                 <beans:ref bean="expressionVoter" />  
    64.             </beans:list>  
    65.         </beans:property>  
    66.     </beans:bean>  

    SpringSecurityConfig.java

    Java代码  收藏代码
    1. @Configuration  
    2. @EnableWebMvcSecurity  
    3. public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {  
    4.   
    5.     private static final Logger logger = Logger  
    6.             .getLogger(SpringSecurityConfig.class);  
    7.   
    8.     @Override  
    9.     public void configure(WebSecurity web) throws Exception {  
    10.         // 设置不拦截规则  
    11.         web.ignoring().antMatchers("/static/**", "/**/*.jsp");  
    12.   
    13.     }  
    14.   
    15.     @Override  
    16.     protected void configure(HttpSecurity http) throws Exception {  
    17.         // 设置拦截规则  
    18.         // 自定义accessDecisionManager访问控制器,并开启表达式语言  
    19.         http.authorizeRequests().accessDecisionManager(accessDecisionManager())  
    20.                 .expressionHandler(webSecurityExpressionHandler())  
    21.                 .antMatchers("/**/*.do*").hasRole("USER")  
    22.                 .antMatchers("/**/*.htm").hasRole("ADMIN").and()  
    23.                 .exceptionHandling().accessDeniedPage("/login");  
    24.   
    25.         // 开启默认登录页面  
    26.         // http.formLogin();  
    27.   
    28.         // 自定义登录页面  
    29.         http.csrf().disable().formLogin().loginPage("/login")  
    30.                 .failureUrl("/login?error=1")  
    31.                 .loginProcessingUrl("/j_spring_security_check")  
    32.                 .usernameParameter("j_username")  
    33.                 .passwordParameter("j_password").permitAll();  
    34.   
    35.         // 自定义注销  
    36.         http.logout().logoutUrl("/logout").logoutSuccessUrl("/login")  
    37.                 .invalidateHttpSession(true);  
    38.   
    39.         // session管理  
    40.         http.sessionManagement().sessionFixation().changeSessionId()  
    41.                 .maximumSessions(1).expiredUrl("/");  
    42.   
    43.         // RemeberMe  
    44.         http.rememberMe().key("webmvc#FD637E6D9C0F1A5A67082AF56CE32485");  
    45.   
    46.     }  
    47.   
    48.     @Override  
    49.     protected void configure(AuthenticationManagerBuilder auth)  
    50.             throws Exception {  
    51.   
    52.         // 自定义UserDetailsService  
    53.         auth.userDetailsService(userDetailsService()).passwordEncoder(  
    54.                 new Md5PasswordEncoder());  
    55.   
    56.     }  
    57.   
    58.     @Bean  
    59.     public CP_UserDetailsService userDetailsService() {  
    60.         logger.info("CP_UserDetailsService");  
    61.         CP_UserDetailsService userDetailsService = new CP_UserDetailsService();  
    62.         return userDetailsService;  
    63.     }  
    64.   
    65.     @Bean  
    66.     public LoggerListener loggerListener() {  
    67.         logger.info("org.springframework.security.authentication.event.LoggerListener");  
    68.         LoggerListener loggerListener = new LoggerListener();  
    69.   
    70.         return loggerListener;  
    71.     }  
    72.   
    73.     @Bean  
    74.     public org.springframework.security.access.event.LoggerListener eventLoggerListener() {  
    75.         logger.info("org.springframework.security.access.event.LoggerListener");  
    76.         org.springframework.security.access.event.LoggerListener eventLoggerListener = new org.springframework.security.access.event.LoggerListener();  
    77.   
    78.         return eventLoggerListener;  
    79.     }  
    80.   
    81.     /* 
    82.      *  
    83.      * 这里可以增加自定义的投票器 
    84.      */  
    85.     @SuppressWarnings("rawtypes")  
    86.     @Bean(name = "accessDecisionManager")  
    87.     public AccessDecisionManager accessDecisionManager() {  
    88.         logger.info("AccessDecisionManager");  
    89.         List<AccessDecisionVoter> decisionVoters = new ArrayList<AccessDecisionVoter>();  
    90.         decisionVoters.add(new RoleVoter());  
    91.         decisionVoters.add(new AuthenticatedVoter());  
    92.         decisionVoters.add(webExpressionVoter());// 启用表达式投票器  
    93.   
    94.         AffirmativeBased accessDecisionManager = new AffirmativeBased(  
    95.                 decisionVoters);  
    96.   
    97.         return accessDecisionManager;  
    98.     }  
    99.   
    100.     /* 
    101.      * 表达式控制器 
    102.      */  
    103.     @Bean(name = "expressionHandler")  
    104.     public DefaultWebSecurityExpressionHandler webSecurityExpressionHandler() {  
    105.         logger.info("DefaultWebSecurityExpressionHandler");  
    106.         DefaultWebSecurityExpressionHandler webSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();  
    107.         return webSecurityExpressionHandler;  
    108.     }  
    109.   
    110.     /* 
    111.      * 表达式投票器 
    112.      */  
    113.     @Bean(name = "expressionVoter")  
    114.     public WebExpressionVoter webExpressionVoter() {  
    115.         logger.info("WebExpressionVoter");  
    116.         WebExpressionVoter webExpressionVoter = new WebExpressionVoter();  
    117.         webExpressionVoter.setExpressionHandler(webSecurityExpressionHandler());  
    118.         return webExpressionVoter;  
    119.     }  
    120.   
  • 相关阅读:
    object-c iOS 教程 git for mac
    mac Git本地服务器配置
    [转]XCode中修改缺省公司名称/开发人员名称
    IOS------Warning
    Linux---CentOS 定时运行脚本配置练手
    微信公众号一些错误的原因错误代码41001
    微信支付的一些新的经验总结
    关于THINKPHP5模型关联的初步理解
    写下thinkphp5和thinkphp3.2的不同
    练手THINKPHP5过程和bootstrap3.3.7
  • 原文地址:https://www.cnblogs.com/yhtboke/p/5764697.html
Copyright © 2011-2022 走看看