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
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      SpringBoot中怎么對(duì)Shiro進(jìn)行整合-創(chuàng)新互聯(lián)

      本篇內(nèi)容介紹了“SpringBoot中怎么對(duì)Shiro進(jìn)行整合”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

      成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括開魯網(wǎng)站建設(shè)、開魯網(wǎng)站制作、開魯網(wǎng)頁(yè)制作以及開魯網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(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)輻射到開魯省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

      原生的整合

      創(chuàng)建項(xiàng)目

      創(chuàng)建一個(gè) Spring Boot 項(xiàng)目,只需要添加 Web 依賴即可:

      SpringBoot中怎么對(duì)Shiro進(jìn)行整合

      項(xiàng)目創(chuàng)建成功后,加入 Shiro 相關(guān)的依賴,完整的 pom.xml 文件中的依賴如下:

      
        
          org.springframework.boot
          spring-boot-starter-web
        
        
          org.apache.shiro
          shiro-web
          1.4.0
        
        
          org.apache.shiro
          shiro-spring
          1.4.0
        
      

      創(chuàng)建 Realm

      接下來(lái)我們來(lái)自定義核心組件 Realm:

      public class MyRealm extends AuthorizingRealm {
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
          return null;
        }
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
          String username = (String) token.getPrincipal();
          if (!"javaboy".equals(username)) {
            throw new UnknownAccountException("賬戶不存在!");
          }
          return new SimpleAuthenticationInfo(username, "123", getName());
        }
      }

      在 Realm 中實(shí)現(xiàn)簡(jiǎn)單的認(rèn)證操作即可,不做授權(quán),授權(quán)的具體寫法和 SSM 中的 Shiro 一樣,不贅述。這里的認(rèn)證表示用戶名必須是 javaboy ,用戶密碼必須是 123 ,滿足這樣的條件,就能登錄成功!

      配置 Shiro

      接下來(lái)進(jìn)行 Shiro 的配置:

      @Configuration
      public class ShiroConfig {
        @Bean
        MyRealm myRealm() {
          return new MyRealm();
        }
        
        @Bean
        SecurityManager securityManager() {
          DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
          manager.setRealm(myRealm());
          return manager;
        }
        
        @Bean
        ShiroFilterFactoryBean shiroFilterFactoryBean() {
          ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
          bean.setSecurityManager(securityManager());
          bean.setLoginUrl("/login");
          bean.setSuccessUrl("/index");
          bean.setUnauthorizedUrl("/unauthorizedurl");
          Map map = new LinkedHashMap<>();
          map.put("/doLogin", "anon");
          map.put("/**", "authc");
          bean.setFilterChainDefinitionMap(map);
          return bean;
        }
      }

      在這里進(jìn)行 Shiro 的配置主要配置 3 個(gè) Bean :

      • 首先需要提供一個(gè) Realm 的實(shí)例。

      • 需要配置一個(gè) SecurityManager,在 SecurityManager 中配置 Realm。

      • 配置一個(gè) ShiroFilterFactoryBean ,在 ShiroFilterFactoryBean 中指定路徑攔截規(guī)則等。

      • 配置登錄和測(cè)試接口。

      其中,ShiroFilterFactoryBean 的配置稍微多一些,配置含義如下:

      • setSecurityManager 表示指定 SecurityManager。

      • setLoginUrl 表示指定登錄頁(yè)面。

      • setSuccessUrl 表示指定登錄成功頁(yè)面。

      • 接下來(lái)的 Map 中配置了路徑攔截規(guī)則,注意,要有序。

      這些東西都配置完成后,接下來(lái)配置登錄 Controller:

      @RestController
      public class LoginController {
        @PostMapping("/doLogin")
        public void doLogin(String username, String password) {
          Subject subject = SecurityUtils.getSubject();
          try {
            subject.login(new UsernamePasswordToken(username, password));
            System.out.println("登錄成功!");
          } catch (AuthenticationException e) {
            e.printStackTrace();
            System.out.println("登錄失敗!");
          }
        }
        @GetMapping("/hello")
        public String hello() {
          return "hello";
        }
        @GetMapping("/login")
        public String login() {
          return "please login!";
        }
      }

      測(cè)試時(shí),首先訪問(wèn) /hello 接口,由于未登錄,所以會(huì)自動(dòng)跳轉(zhuǎn)到 /login 接口:

      SpringBoot中怎么對(duì)Shiro進(jìn)行整合

      然后調(diào)用 /doLogin 接口完成登錄:

      SpringBoot中怎么對(duì)Shiro進(jìn)行整合

      再次訪問(wèn) /hello 接口,就可以成功訪問(wèn)了:

      SpringBoot中怎么對(duì)Shiro進(jìn)行整合

      使用 Shiro Starter

      上面這種配置方式實(shí)際上相當(dāng)于把 SSM 中的 XML 配置拿到 Spring Boot 中用 Java 代碼重新寫了一遍,除了這種方式之外,我們也可以直接使用 Shiro 官方提供的 Starter 。

      創(chuàng)建工程,和上面的一樣

      創(chuàng)建成功后,添加 shiro-spring-boot-web-starter ,這個(gè)依賴可以代替之前的 shiro-web 和 shiro-spring 兩個(gè)依賴,pom.xml 文件如下:

      
        
          org.springframework.boot
          spring-boot-starter-web
        
        
          org.apache.shiro
          shiro-spring-boot-web-starter
          1.4.0
        
      

      創(chuàng)建 Realm

      這里的 Realm 和前面的一樣,我就不再贅述。

      配置 Shiro 基本信息

      接下來(lái)在 application.properties 中配置 Shiro 的基本信息:

      shiro.sessionManager.sessionIdCookieEnabled=true
      shiro.sessionManager.sessionIdUrlRewritingEnabled=true
      shiro.unauthorizedUrl=/unauthorizedurl
      shiro.web.enabled=true
      shiro.successUrl=/index
      shiro.loginUrl=/login

      配置解釋:

      • 第一行表示是否允許將sessionId 放到 cookie 中

      • 第二行表示是否允許將 sessionId 放到 Url 地址攔中

      • 第三行表示訪問(wèn)未獲授權(quán)的頁(yè)面時(shí),默認(rèn)的跳轉(zhuǎn)路徑

      • 第四行表示開啟 shiro

      • 第五行表示登錄成功的跳轉(zhuǎn)頁(yè)面

      • 第六行表示登錄頁(yè)面

      配置 ShiroConfig

      @Configuration
      public class ShiroConfig {
        @Bean
        MyRealm myRealm() {
          return new MyRealm();
        }
        @Bean
        DefaultWebSecurityManager securityManager() {
          DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
          manager.setRealm(myRealm());
          return manager;
        }
        @Bean
        ShiroFilterChainDefinition shiroFilterChainDefinition() {
          DefaultShiroFilterChainDefinition definition = new DefaultShiroFilterChainDefinition();
          definition.addPathDefinition("/doLogin", "anon");
          definition.addPathDefinition("/**", "authc");
          return definition;
        }
      }

      “SpringBoot中怎么對(duì)Shiro進(jìn)行整合”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


      當(dāng)前標(biāo)題:SpringBoot中怎么對(duì)Shiro進(jìn)行整合-創(chuàng)新互聯(lián)
      分享地址:http://www.ef60e0e.cn/article/ceisgi.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>

        吉林市| 荔波县| 乐陵市| 余江县| 岳阳市| 德化县| 奉化市| 诸城市| 龙游县| 嘉定区| 开平市| 马边| 尉犁县| 云龙县| 天峨县| 娄底市| 盐亭县| 万州区| 临漳县| 梨树县| 遂溪县| 西藏| 绵竹市| 大英县| 吉木萨尔县| 华池县| 洛南县| 安丘市| 报价| 宁南县| 沿河| 桦南县| 邳州市| 大姚县| 禄劝| 常山县| 沁水县| 康乐县| 五华县| 阿拉善盟| 靖远县|