成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

springboot整合shiro使用shiro-spring-boot-web-starter

sevi_stuo / 2252人閱讀

摘要:此文章僅僅說明在整合時(shí)的一些坑并不是教程增加依賴集成依賴配置三個(gè)必須的用于授權(quán)和登錄創(chuàng)建自己的實(shí)例用于實(shí)現(xiàn)權(quán)限三種方式實(shí)現(xiàn)定義權(quán)限路徑第一種使用角色名定義第二種使用權(quán)限定義第三種使用接口的自定義配置此處配置之后需要在對(duì)應(yīng)的

此文章僅僅說明在springboot整合shiro時(shí)的一些坑,并不是教程

增加依賴



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

配置三個(gè)必須的Bean

Realm
用于授權(quán)和登錄

        @Bean
        public Realm realm() {
            //創(chuàng)建自己的Realm實(shí)例
            return new UserRealm();
        }

ShiroFilterChainDefinition
用于實(shí)現(xiàn)權(quán)限

        DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
        
        // 三種方式實(shí)現(xiàn)定義權(quán)限路徑
        // 第一種:使用角色名定義
        chainDefinition.addPathDefinition("/admin/**", "authc, roles[admin]");

        // 第二種:使用權(quán)限code定義
        chainDefinition.addPathDefinition("/docs/**", "authc, perms[document:read]");

        // 第三種:使用接口的自定義配置(此處配置之后需要在對(duì)應(yīng)的接口使用@RequiresPermissions(""))
        chainDefinition.addPathDefinition("/**", "authc");
        return chainDefinition;

CacheManager
緩存管理

        @Bean
        protected CacheManager cacheManager() {
            return new MemoryConstrainedCacheManager();
        }

還有一些配置,可以在配置文件中配置,具體配置項(xiàng)見 shiro配置

以下內(nèi)容是為了實(shí)現(xiàn)前后端分離,配置shiro攔截器實(shí)現(xiàn)返回401狀態(tài)碼的需求

編寫攔截器類

public class FormLoginFilter extends PathMatchingFilter {
    @Override
    protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
        Subject subject = SecurityUtils.getSubject();
        boolean isAuthenticated = subject.isAuthenticated();
        if (!isAuthenticated) {
            HttpServletResponse resp = (HttpServletResponse) response;
            resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            resp.getWriter().print("NO AUTH!");
            return false;
        }
        return true;
    }
}

在之前配置的三個(gè)Bean的基礎(chǔ)上多配置一個(gè)BeanShiroFilterFactoryBean

    @Bean
    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        // 必須設(shè)置SecuritManager
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        Map filters = shiroFilterFactoryBean.getFilters();
        //配置攔截器,實(shí)現(xiàn)無權(quán)限返回401,而不是跳轉(zhuǎn)到登錄頁
        filters.put("authc", new FormLoginFilter());
        // 如果不設(shè)置默認(rèn)會(huì)自動(dòng)尋找Web工程根目錄下的"/login.jsp"頁面
        shiroFilterFactoryBean.setLoginUrl("/login");
        // 登錄成功后要跳轉(zhuǎn)的鏈接
        shiroFilterFactoryBean.setSuccessUrl("/index");
        // 未授權(quán)界面;
        shiroFilterFactoryBean.setUnauthorizedUrl("/403");
        // 攔截器
        Map filterChainDefinitionMap = new LinkedHashMap();
        // 過濾鏈定義,從上向下順序執(zhí)行,一般將 /**放在最為下邊
        // authc:所有url都必須認(rèn)證通過才可以訪問; anon:所有url都都可以匿名訪問
        filterChainDefinitionMap.put("/**", "authc");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return shiroFilterFactoryBean;
    }

此處配置了過濾鏈,上面三個(gè)必須的Bean中修改其中的ShiroFilterChainDefinition

    @Bean
    public ShiroFilterChainDefinition shiroFilterChainDefinition() {
        //不需要在此處配置權(quán)限頁面,因?yàn)樯厦娴腟hiroFilterFactoryBean已經(jīng)配置過,但是此處必須存在,因?yàn)閟hiro-spring-boot-web-starter或查找此Bean,沒有會(huì)報(bào)錯(cuò)
        return new DefaultShiroFilterChainDefinition();;
    }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68736.html

相關(guān)文章

  • 兩年了,我寫了這些干貨!

    摘要:開公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時(shí),大家搜索起來就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章系列處理登錄請(qǐng)求前后端分離一使用完美處理權(quán)限問題前后端分離二使用完美處理權(quán)限問題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時(shí),大家搜索起來就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章! Spring Boo...

    huayeluoliuhen 評(píng)論0 收藏0
  • SpringBoot+SpringSecurity+jwt整合及初體驗(yàn)

    摘要:進(jìn)行下一項(xiàng)配置,為了區(qū)分必須加入。另起一行,以示尊重。這行代碼主要是用于驗(yàn)證,后面再說。然后跑下接口,發(fā)現(xiàn)沒問題,正常打印,說明主體也在上下文中了。說明這會(huì)上下文環(huán)境中我們主體不存在。所說以,主體數(shù)據(jù)生命周期是一次請(qǐng)求。 showImg(https://segmentfault.com/img/bVbtoG1?w=1600&h=900); 原來一直使用shiro做安全框架,配置起來相當(dāng)...

    dackel 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<