1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      SpringSecurity自定義登錄驗(yàn)證成功與失敗的結(jié)果怎么處理

      小編給大家分享一下SpringSecurity自定義登錄驗(yàn)證成功與失敗的結(jié)果怎么處理,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

      創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括南充網(wǎng)站建設(shè)、南充網(wǎng)站制作、南充網(wǎng)頁制作以及南充網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,南充網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到南充省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

      一、需要自定義登錄結(jié)果的場景

      在我之前的文章中,做過登錄驗(yàn)證流程的源碼解析。其中比較重要的就是

      • 當(dāng)我們登錄成功的時(shí)候,是由AuthenticationSuccessHandler進(jìn)行登錄結(jié)果處理,默認(rèn)跳轉(zhuǎn)到defaultSuccessUrl配置的路徑對(duì)應(yīng)的資源頁面(一般是首頁index.html)。

      • 當(dāng)我們登錄失敗的時(shí)候,是由AuthenticationfailureHandler進(jìn)行登錄結(jié)果處理,默認(rèn)跳轉(zhuǎn)到failureUrl配置的路徑對(duì)應(yīng)的資源頁面(一般是登錄頁login.html)。

      但是在web應(yīng)用開發(fā)過程中需求是千變?nèi)f化的,有時(shí)需要我們針對(duì)登錄結(jié)果做個(gè)性化處理,比如:

      • 我們希望不同的人登陸之后,看到不同的首頁

      • 我們應(yīng)用是前后端分離的,驗(yàn)證響應(yīng)結(jié)果是JSON格式數(shù)據(jù),而不是頁面跳轉(zhuǎn)

      以上的這些情況,使用Spring Security作為安全框架的時(shí)候,都需要我們使用本節(jié)學(xué)到的知識(shí)進(jìn)行自定義的登錄驗(yàn)證結(jié)果處理。

      二、自定義登陸成功的結(jié)果處理

      為了滿足上面的需求,我們?cè)撊绾稳プ瞿兀肯旅嬉恍」?jié)我們來說明一下。AuthenticationSuccessHandler接口是Security提供的認(rèn)證成功處理器接口,我們只需要去實(shí)現(xiàn)它即可。但是通常來說,我們不會(huì)直接去實(shí)現(xiàn)AuthenticationSuccessHandler接口,而是繼承SavedRequestAwareAuthenticationSuccessHandler 類,這個(gè)類會(huì)記住用戶上一次請(qǐng)求的資源路徑,比如:用戶請(qǐng)求books.html,沒有登陸所以被攔截到了登錄頁,當(dāng)你萬成登陸之后會(huì)自動(dòng)跳轉(zhuǎn)到books.html,而不是主頁面。

      @Component
      public class MyAuthenticationSuccessHandler 
                  extends SavedRequestAwareAuthenticationSuccessHandler {
        //在application配置文件中配置登陸的類型是JSON數(shù)據(jù)響應(yīng)還是做頁面響應(yīng)
        @Value("${spring.security.logintype}")
        private String loginType;
        private static ObjectMapper objectMapper = new ObjectMapper();
        @Override
        public void onAuthenticationSuccess(HttpServletRequest request, 
                          HttpServletResponse response, 
                          Authentication authentication) 
                          throws ServletException, IOException {
          if (loginType.equalsIgnoreCase("JSON")) {
            response.setContentType("application/json;charset=UTF-8");
            response.getWriter().write(objectMapper.writeValueAsString(AjaxResponse.success()));
          } else {
            // 會(huì)幫我們跳轉(zhuǎn)到上一次請(qǐng)求的頁面上
            super.onAuthenticationSuccess(request, response, authentication);
          }
        }
      }
      • 在上面的自定義登陸成功處理中,既適應(yīng)JSON前后端分離的應(yīng)用登錄結(jié)果處理,也適用于模板頁面跳轉(zhuǎn)應(yīng)用的登錄結(jié)果處理

      • ObjectMapper 是Spring Boot默認(rèn)集成的JSON數(shù)據(jù)處理類庫Jackson中的類。

      • AjaxResponse是一個(gè)自定義的通用的JSON數(shù)據(jù)接口響應(yīng)類。

      三、自定義登錄失敗的結(jié)果處理

      這里我們同樣沒有直接實(shí)現(xiàn)AuthenticationFailureHandler接口,而是繼承SimpleUrlAuthenticationFailureHandler 類。該類中默認(rèn)實(shí)現(xiàn)了登錄驗(yàn)證失敗的跳轉(zhuǎn)邏輯,即登陸失敗之后回到登錄頁面。我們可以利用這一點(diǎn)簡化我們的代碼。

      @Component
      public class MyAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler {
        //在application配置文件中配置登陸的類型是JSON數(shù)據(jù)響應(yīng)還是做頁面響應(yīng)
        @Value("${spring.security.logintype}")
        private String loginType;
        private static ObjectMapper objectMapper = new ObjectMapper();
        @Override
        public void onAuthenticationFailure(HttpServletRequest request,
                          HttpServletResponse response, 
                          AuthenticationException exception) 
                          throws IOException, ServletException {
          if (loginType.equalsIgnoreCase("JSON")) {
            response.setContentType("application/json;charset=UTF-8");
            response.getWriter().write(
                objectMapper.writeValueAsString(
                    AjaxResponse.error(
                        new CustomException(
                          CustomExceptionType.USER_INPUT_ERROR,
                          "用戶名或密碼存在錯(cuò)誤,請(qǐng)檢查后再次登錄"))));
          } else {
            response.setContentType("text/html;charset=UTF-8");
            super.onAuthenticationFailure(request, response, exception);
          }
        }
      }
      • 在上面的自定義登陸失敗處理中,既適應(yīng)JSON前后端分離的應(yīng)用登錄失敗結(jié)果處理,也適用于模板頁面跳轉(zhuǎn)應(yīng)用的登錄失敗結(jié)果處理

      • 登陸失敗之后,將默認(rèn)跳轉(zhuǎn)到默認(rèn)的failureUrl,即登錄界面。

      四、配置SecurityConfig

      @Configuration
      public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Resource
        private MyAuthenticationSuccessHandler myAuthenticationSuccessHandler;
        @Resource
        private MyAuthenticationFailureHandler myAuthenticationFailureHandler;
        @Override
        protected void configure(HttpSecurity http) throws Exception {
          http.csrf().disable() //禁用跨站csrf攻擊防御,后面的章節(jié)會(huì)專門講解
            .formLogin()
            .successHandler(myAuthenticationSuccessHandler)
            .failureHandler(myAuthenticationFailureHandler)
            .defaultSuccessUrl("/index")//登錄認(rèn)證成功后默認(rèn)轉(zhuǎn)跳的路徑
            .failureUrl("/login.html") //登錄認(rèn)證是被跳轉(zhuǎn)頁面
      }
      • 將自定義的AuthenticationSuccessHandler和AuthenticationFailureHandler注入到Spring Security配置類中

      • 使用fromlogin模式,配置successHandler和failureHandler。

      • 并且配置defaultSuccessUrl和failureUrl

      以上是“SpringSecurity自定義登錄驗(yàn)證成功與失敗的結(jié)果怎么處理”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


      名稱欄目:SpringSecurity自定義登錄驗(yàn)證成功與失敗的結(jié)果怎么處理
      網(wǎng)頁URL:http://ef60e0e.cn/article/jcspps.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        邹平县| 阿拉善右旗| 航空| 浦县| 苗栗市| 衢州市| 甘肃省| 尚志市| 贵德县| 同心县| 都江堰市| 娄底市| 吕梁市| 嘉善县| 乳源| 枝江市| 资溪县| 白玉县| 新民市| 阳朔县| 湖口县| 嘉义市| 酉阳| 成武县| 故城县| 白河县| 资阳市| 任丘市| 图木舒克市| 商城县| 尚志市| 长岛县| 三台县| 青龙| 保靖县| 青铜峡市| 嘉峪关市| 牡丹江市| 齐齐哈尔市| 志丹县| 阳高县|