当前位置: 首页 > news >正文

spring boot 整合apache shiro

为什么80%的码农都做不了架构师?>>>   hot3.png

package books.shiro;

import books.pojo.Permission;
import books.service.PermissionService;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import java.util.LinkedHashMap;
import java.util.List;

/**
 * @author: GPJ
 * @Description: Shiro 核心配置
 * @Date Created in 10:16 2018/1/22
 * @Modified By:
 */
@Configuration
public class ShiroConfig {

    @Resource
    private PermissionService permissionService;


    @Bean
    public ShiroFilterFactoryBean shiroFilter(@Qualifier("securityManager") SecurityManager securityManager) {
        ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
        factoryBean.setSecurityManager(securityManager);

        // 默认配置
        factoryBean.setLoginUrl("/s/login");
        factoryBean.setSuccessUrl("/s/index");
        factoryBean.setUnauthorizedUrl("/s/unauthorized");
        // 权限配置
        LinkedHashMap<String , String> filterChainDefinitionMap = new LinkedHashMap<String , String>();
        // 数据库动态配置

            List<Permission> permissionList = permissionService.list();
            for (Permission permission : permissionList) {
                if (permission.getStatus() == 1 && permission.getType() != 1) {
                    // 字符串拼接权限
                    filterChainDefinitionMap.put(permission.getUrl(), "rest[" + permission.getUrl() + "]");
                }
            }

        // 其他配置
        filterChainDefinitionMap.put("/web/grade/belong", "anon");
        filterChainDefinitionMap.put("/s/index", "authc");
        filterChainDefinitionMap.put("/s/login", "anon");
        filterChainDefinitionMap.put("/s/unauthorized", "anon");
        filterChainDefinitionMap.put("/s/logout", "logout");

        filterChainDefinitionMap.put("/**", "authc");
        factoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return factoryBean;
    }

    @Bean("securityManager")
    public SecurityManager securityManager(@Qualifier("myRealm") MyRealm myRealm) {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(myRealm);
        return securityManager;
    }

    @Bean("myRealm")
    public MyRealm myRealm() {
        // 定义加密
        HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();
        matcher.setHashAlgorithmName("MD5");
        matcher.setHashIterations(21);

        MyRealm realm = new MyRealm();
        realm.setCredentialsMatcher(matcher);
        return realm;
    }

    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(@Qualifier("securityManager") SecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
        advisor.setSecurityManager(securityManager);
        return advisor;
    }

    @Bean
    public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
        DefaultAdvisorAutoProxyCreator creator = new DefaultAdvisorAutoProxyCreator();
        creator.setProxyTargetClass(true);
        return creator;
    }
}

 

转载于:https://my.oschina.net/iamgpj/blog/1617475

相关文章:

  • linux用户操作
  • python 遍历本地文件
  • ShaderForge插件分享
  • eclipse不能正常启动
  • ReSharper2017.3的列对齐、排版格式、列对齐错误的修复
  • Vue.js 案例资料汇总
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 软件架构系列二:Clean架构
  • mysql varchar最大长度问题
  • RabbitMQ 高可用集群搭建及电商平台使用经验总结
  • pandas Dataframe['A']与Dataframe[['A']]的区别
  • VS2010 c++生成和调用dll例子(转载)
  • 使用mongoose和bcrypt实现用户密码加密
  • Android WebView基本用法及常见问题
  • 9.Azure文件(文件共享)-NAS(下)
  • android 一些 utils
  • Hexo+码云+git快速搭建免费的静态Blog
  • Hibernate最全面试题
  • HTML-表单
  • Quartz初级教程
  • rc-form之最单纯情况
  • vue-cli在webpack的配置文件探究
  • 翻译:Hystrix - How To Use
  • 后端_ThinkPHP5
  • 巧用 TypeScript (一)
  • 如何设计一个微型分布式架构?
  • 什么软件可以剪辑音乐?
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 算法---两个栈实现一个队列
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # 数据结构
  • #pragma multi_compile #pragma shader_feature
  • #QT(智能家居界面-界面切换)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (论文阅读40-45)图像描述1
  • (区间dp) (经典例题) 石子合并
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (四)鸿鹄云架构一服务注册中心
  • (四)图像的%2线性拉伸
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)linux 命令大全
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .bat批处理(一):@echo off
  • .jks文件(JAVA KeyStore)
  • .net mvc部分视图