SasSHRM中基于shiro的认证授权:系统微服务配置shiro
生活随笔
收集整理的這篇文章主要介紹了
SasSHRM中基于shiro的认证授权:系统微服务配置shiro
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#服務配置
server:port: 9002
#spring配置
spring:#1.應用配置application:name: ihrm-system #指定服務名#2.數據庫連接池datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ihrm?useUnicode=true&characterEncoding=utf8username: rootpassword: 111111#3.JPAjpa:database: MySQLshow-sql: trueopen-in-view: trueredis:host: localhostport: 9999password: 123456
jwt:config:key: saas-ihrmttl: 3600000
package com.learn.system;import com.learn.common.shiro.realm.IhrmRealm;
import com.learn.common.shiro.session.CustomSessionManager;
import com.learn.system.shiro.realm.UserRealm;
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.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.crazycake.shiro.RedisCacheManager;
import org.crazycake.shiro.RedisManager;
import org.crazycake.shiro.RedisSessionDAO;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.LinkedHashMap;
import java.util.Map;@Configuration
public class ShiroConfiguration {//1.創建realm@Beanpublic IhrmRealm getRealm() {return new UserRealm();}//2.創建安全管理器@Beanpublic SecurityManager getSecurityManager(IhrmRealm realm) {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(realm);//將自定義的會話管理器注冊到安全管理器中securityManager.setSessionManager(sessionManager());//將自定義的redis緩存管理器注冊到安全管理器中securityManager.setCacheManager(cacheManager());return securityManager;}//3.配置shiro的過濾器工廠/*** 再web程序中,shiro進行權限控制全部是通過一組過濾器集合進行控制**/@Beanpublic ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {//1.創建過濾器工廠ShiroFilterFactoryBean filterFactory = new ShiroFilterFactoryBean();//2.設置安全管理器filterFactory.setSecurityManager(securityManager);//3.通用配置(跳轉登錄頁面,未授權跳轉的頁面)filterFactory.setLoginUrl("/autherror?code=1");//跳轉url地址filterFactory.setUnauthorizedUrl("/autherror?code=2");//未授權的url//4.設置過濾器集合Map<String,String> filterMap = new LinkedHashMap<>();//anon -- 匿名訪問filterMap.put("/sys/login","anon");filterMap.put("/autherror","anon");//注冊//authc -- 認證之后訪問(登錄)filterMap.put("/**","authc");//perms -- 具有某中權限 (使用注解配置授權)filterFactory.setFilterChainDefinitionMap(filterMap);return filterFactory;}@Value("${spring.redis.host}")private String host;@Value("${spring.redis.port}")private int port;@Value("${spring.redis.password}")private String password;/*** 1.redis的控制器,操作redis*/public RedisManager redisManager() {RedisManager redisManager = new RedisManager();redisManager.setHost(host);redisManager.setPort(port);redisManager.setPassword(password);return redisManager;}/*** 2.sessionDao*/public RedisSessionDAO redisSessionDAO() {RedisSessionDAO sessionDAO = new RedisSessionDAO();sessionDAO.setRedisManager(redisManager());return sessionDAO;}/*** 3.會話管理器*/public DefaultWebSessionManager sessionManager() {CustomSessionManager sessionManager = new CustomSessionManager();sessionManager.setSessionDAO(redisSessionDAO());//禁用cookiesessionManager.setSessionIdCookieEnabled(false);//禁用url重寫 url;jsessionid=idsessionManager.setSessionIdUrlRewritingEnabled(false);return sessionManager;}/*** 4.緩存管理器*/public RedisCacheManager cacheManager() {RedisCacheManager redisCacheManager = new RedisCacheManager();redisCacheManager.setRedisManager(redisManager());return redisCacheManager;}//開啟對shior注解的支持@Beanpublic AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();advisor.setSecurityManager(securityManager);return advisor;}
}
package com.learn.common.controller;import com.learn.common.entity.Result;
import com.learn.common.entity.ResultCode;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@CrossOrigin
public class ErrorController {//公共錯誤跳轉@RequestMapping(value="autherror")public Result autherror(int code) {return code ==1?new Result(ResultCode.UNAUTHENTICATED):new Result(ResultCode.UNAUTHORISE);}}
?
總結
以上是生活随笔為你收集整理的SasSHRM中基于shiro的认证授权:系统微服务配置shiro的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SasSHRM中基于shiro的认证授权
- 下一篇: 后台服务系统之什么是dubbo