spring security學習----配置適配器 WebSecurityConfigurerAdapter


  1 /**
  2  *  spring security 核心配置文件
  3  */
  4 @Configuration
  5 public class BrowerSecurityConfig extends WebSecurityConfigurerAdapter {
  6     @Autowired
  7     private AuthenticationManager authenticationManager;
  8     @Autowired  //自定義的安全元   數據源     實現FilterInvocationSecurityMetadataSource
  9     private MyInvocationSecurityMetadataSourceService myInvocationSecurityMetadataSourceService;
 10     @Autowired //自定義訪問決策器
 11     private MyAccessDecisionManager myAccessDecisionManager;
 12 
 13     @Override
 14     protected void configure(HttpSecurity http) throws Exception {
 15         /**
 16          *  from表單登錄設置
 17          */
 18         http.formLogin()
 19                 .loginPage("")                      //登錄頁面                      /login
 20                 .passwordParameter("")              //設置form表單中對應的name參數  默認為 password   下同
 21                 .usernameParameter("")              //
 22                 .defaultSuccessUrl("")            //認證成功后的跳轉頁面 默認跳轉頁面   可以設置是否總是默認  不是的話可以跳轉與用戶的target-url
 23                 .failureUrl("")
 24                 .failureForwardUrl("")            //登錄失敗 轉發 的url
 25                 .successForwardUrl("")              //登錄成功 轉發 的url  與successHandler對應  即處理完后請求轉發的url
 26                 .failureHandler(null)               //自定義的認證失敗 做什么處理
 27                 .successHandler(null)               //自定義認證成功 后做的處理    ----- 例如 想記錄用戶信息判斷用戶狀態等
 28                 .permitAll()                      //對於需要所有用戶都可以訪問的界面 或者url進行設置
 29                 .loginProcessingUrl("")             //自定義處理認證的url    默認為    /login
 30                 .authenticationDetailsSource(null)  //自定義身份驗證的數據源  理解為查出數據庫中的密碼 和權限(可以不加) 然后再交給security
 31                 ////修改和替換配置     已經配置好的修改   例如下面修改  安全攔截器的安全數據源
 32                 .withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() {
 33                     public <O extends FilterSecurityInterceptor> O postProcess(
 34                             O fsi) {
 35                         fsi.setPublishAuthorizationSuccess(true);
 36                         //修改成自定義的     安全元數據源  權限的源  !!!!!
 37                         fsi.setSecurityMetadataSource(myInvocationSecurityMetadataSourceService);
 38                         //修改成自定義的     訪問決策器  自定義的
 39                         fsi.setAccessDecisionManager(myAccessDecisionManager);
 40                         //使用系統的
 41                         fsi.setAuthenticationManager(authenticationManager);
 42                         return fsi;
 43                     }
 44                 });
 45         /**
 46          *  請求認證管理
 47          */
 48         http.authorizeRequests()
 49                 .antMatchers("url匹配路徑").permitAll()          //url匹配路徑 permitAll 運行 全部訪問 不用認證
 50                 .accessDecisionManager(null)                                 //訪問決策器
 51                 .filterSecurityInterceptorOncePerRequest(true)               //過濾每個請求一次的安全攔截器 ???
 52                 .anyRequest().authenticated()                                //其他的請求 需要認證,
 53                 .antMatchers("/admin/**").hasRole("ADMIN")      //url匹配路徑  具有怎樣的角色
 54                 .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")   //url匹配路徑    具有怎樣的角色 或者是權限
 55         ;
 56         /**
 57          *  anonymous
 58          *
 59          *  匿名訪問時  存在默認 用戶名  annonymousUser
 60          */
 61         http.anonymous().disable().csrf().disable();                         //禁止匿名  關閉csrf
 62         /**
 63          * 登出操作管理
 64          */
 65         http.logout()                                                        //登出處理
 66                 .logoutUrl("/my/logout")
 67                 .logoutSuccessUrl("/my/index")
 68                 .logoutSuccessHandler(null)
 69                 .invalidateHttpSession(true)
 70                 .addLogoutHandler(null)
 71                 .deleteCookies("cookieNamesToClear")
 72         ;
 73         /**
 74          *  session  會話管理
 75          */
 76         http.sessionManagement()                                            //session管理
 77                 .maximumSessions(2)                                         //最大session 數量 --用戶
 78                 .maxSessionsPreventsLogin(false)                            //超過最大sessin數量后時候阻止登錄
 79                 .expiredUrl("/")                                            //會話失效后跳轉的url
 80                 .expiredSessionStrategy(null)                               //自定義session 過期錯略
 81                 .sessionRegistry(null)                                     //自定義的session 注冊 表
 82         ;
 83 
 84     }
 85 
 86     @Override
 87     protected void configure(AuthenticationManagerBuilder auth) throws Exception {
 88         /**
 89          *   基礎的配置
 90          */
 91         auth
 92                 /**
 93                  * 認證 時觸發的事件
 94                  */
 95                 .authenticationEventPublisher(null)
 96                 /**
 97                  *  用戶細節服務
 98                  *
 99                  *  認證管理器數據的來源 吧  用戶身份憑證信息和 權限信息
100                  */
101                 .userDetailsService(null)
102                 /**
103                  *  密碼編輯器 對密碼進行加密
104                  */
105                 .passwordEncoder(null)
106         ;
107     }
108 
109     @Bean
110     @Override
111     public AuthenticationManager authenticationManagerBean() throws Exception {
112         return super.authenticationManagerBean();
113     }
114 
115     @Override
116     public void configure(WebSecurity web) throws Exception {
117         /**
118          * 不進行攔截的mvc
119          */
120         web.ignoring().mvcMatchers();
121         /**
122          * 添加自定義的 安全過濾器
123          */
124         web.addSecurityFilterChainBuilder(null);
125     }
126 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM