您的位置:首页 > 运维架构 > Apache

spring boot 整合apache shiro

2018-02-02 00:00 183 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Spring Boot Shiro