package com.hsqyz.shiro_jwt.config.shiro;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.cache.ehcache.EhCacheManager;
import org.apache.shiro.mgt.DefaultSessionStorageEvaluator;
import org.apache.shiro.mgt.DefaultSubjectDAO;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import javax.servlet.Filter;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author lcz
* @apiNote shiro 配置
*/
@Configuration
public class ShiroConfig {
/**
* 生命周期处理器
* @return
*/
@Bean(name = "lifecycleBeanPostProcessor")
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor();
}
/**
* 加密方式
* @return
*/
@Bean(name = "hashedCredentialsMatcher")
public HashedCredentialsMatcher hashedCredentialsMatcher() {
// 散列凭证匹配器
HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();
// 设置哈希算法名称,这里使用MD5算法
credentialsMatcher.setHashAlgorithmName("MD5");
// 设置哈希迭代,这里迭代2次,相当于 md5(md5(""))
credentialsMatcher.setHashIterations(2);
// 设置存储的凭据16进制编码,需要和生成密码时的一样,默认是 Base64
credentialsMatcher.setStoredCredentialsHexEncoded(true);
return credentialsMatcher;
}
/**
* 自定义Realm
* @param cacheManager
* @return
*/
@Bean(name = "shiroRealm")
@DependsOn("lifecycleBeanPostProcessor")
public ShiroRealm shiroRealm(EhCacheManager cacheManager) {
ShiroRealm realm = new ShiroRealm();
realm.setCacheManager(cacheManager);
return realm;
}
/**
* 缓存管理器
* @return
*/
@Bean(name = "ehCacheManager")
@DependsOn("lifecycleBeanPostProcessor")
public EhCacheManager ehCacheManager() {
EhCacheManager ehCacheManager = new EhCacheManager();
ehCacheManager.setCacheManagerConfigFile("classpath:ehcache.xml");
return ehCacheManager;
}
/**
* 安全管理器
* @param shiroRealm
* @return
*/
@Bean(name = "securityManager")
public DefaultWebSecurityManager securityManager(ShiroRealm shiroRealm) {
// 实例化会话管理器
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// 设置缓存管理器
securityManager.setCacheManager(ehCacheManager());
/**
* 关闭shiro自带的session
* 详情见文档: http://shiro.apache.org/session-management.html#SessionManagement-StatelessApplications%28Sessionless%29
*/
DefaultSessionStorageEvaluator evaluator = new DefaultSessionStorageEvaluator();
evaluator.setSessionStorageEnabled(false);
DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO();
subjectDAO.setSessionStorageEvaluator(evaluator);
securityManager.setSubjectDAO(subjectDAO);
// 设置自定义Realm
securityManager.setRealm(shiroRealm);
return securityManager;
}
/**
* 过滤工厂
* @param securityManager
* @return
*/
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
factoryBean.setSecurityManager(securityManager);
// 添加自己的过滤器并且取名为jwt
Map<String, Filter> filters = new LinkedHashMap<>();
filters.put("jwt", new JWTFilter());
// 添加过滤器
factoryBean.setFilters(filters);
// 配置过滤链
Map<String, String> filterChainDefinitionManager = new LinkedHashMap<>();
// 所有请求通过我们自己的JWT Filter
filterChainDefinitionManager.put("/**", "jwt");
factoryBean.setFilterChainDefinitionMap(filterChainDefinitionManager);
return factoryBean;
}
/**
* 自动代理配置
* @return
*/
@Bean
public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
DefaultAdvisorAutoProxyCreator proxyCreator = new DefaultAdvisorAutoProxyCreator();
// 强制使用cglib,防止重复代理和可能引起代理出错的问题
// https://zhuanlan.zhihu.com/p/29161098
proxyCreator.setProxyTargetClass(true);
return proxyCreator;
}
/**
* 开启注解支持
* @param securityManager
* @return
*/
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
AuthorizationAttributeSourceAdvisor aASA = new AuthorizationAttributeSourceAdvisor();
aASA.setSecurityManager(securityManager);
return aASA;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
SpringBoot整合Shiro+JWT
共141个文件
xml:94个
java:20个
class:20个
5星 · 超过95%的资源 需积分: 5 29 下载量 55 浏览量
2022-05-15
21:51:36
上传
评论 2
收藏 75KB RAR 举报
温馨提示
本Demo案例为SpringBoot整合Shiro + JWT实现用户认证,代码注释全都有以及sql文件都已经打包,下载之后刷新pom依赖即可直接运行。
资源推荐
资源详情
资源评论
收起资源包目录
SpringBoot整合Shiro+JWT (141个子文件)
ShiroConfig.class 5KB
ShiroRealm.class 4KB
JWTUtils.class 3KB
User.class 3KB
LoginController.class 3KB
GlobalExceptionHandler.class 3KB
R.class 2KB
JWTFilter.class 2KB
Role.class 2KB
Menu.class 2KB
MenuServiceImpl.class 1KB
RoleServiceImpl.class 1KB
UserServiceImpl.class 907B
UserController.class 893B
ShiroJwtApplication.class 751B
JWTToken.class 666B
ShiroJwtApplicationTests.class 549B
MenuService.class 331B
RoleService.class 330B
UserService.class 255B
.gitignore 395B
.gitignore 238B
shiro_jwt.iml 10KB
SpringBoot整合Shiro+JTW.iml 344B
ShiroConfig.java 5KB
ShiroRealm.java 3KB
GlobalExceptionHandler.java 3KB
JWTFilter.java 2KB
JWTUtils.java 2KB
LoginController.java 2KB
R.java 2KB
UserController.java 676B
MenuServiceImpl.java 630B
RoleServiceImpl.java 610B
UserServiceImpl.java 540B
JWTToken.java 518B
ShiroJwtApplication.java 328B
User.java 320B
MenuService.java 250B
RoleService.java 249B
Role.java 239B
Menu.java 234B
ShiroJwtApplicationTests.java 222B
UserService.java 220B
application.properties 1B
application.properties 1B
shiro.sql 4KB
uiDesigner.xml 9KB
workspace.xml 5KB
pom.xml 3KB
compiler.xml 882B
jarRepositories.xml 880B
ehcache.xml 825B
ehcache.xml 825B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_12_5.xml 736B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_5_6.xml 713B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 700B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_12_5.xml 695B
Maven__org_springframework_boot_spring_boot_starter_logging_2_5_6.xml 692B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_5_6.xml 685B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_12_5.xml 681B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_5_6.xml 678B
Maven__org_apache_shiro_shiro_spring_boot_web_starter_1_4_1.xml 674B
Maven__org_springframework_boot_spring_boot_starter_test_2_5_6.xml 671B
Maven__org_springframework_boot_spring_boot_starter_json_2_5_6.xml 671B
Maven__org_springframework_boot_spring_boot_starter_aop_2_5_6.xml 664B
Maven__org_springframework_boot_spring_boot_starter_web_2_5_6.xml 664B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_54.xml 660B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_12_5.xml 651B
Maven__org_apache_shiro_shiro_spring_boot_starter_1_4_1.xml 646B
Maven__org_springframework_boot_spring_boot_starter_2_5_6.xml 636B
Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml 633B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 633B
Maven__org_junit_platform_junit_platform_commons_1_7_2.xml 633B
Maven__com_fasterxml_jackson_core_jackson_databind_2_12_5.xml 630B
Maven__org_junit_platform_junit_platform_engine_1_7_2.xml 626B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_54.xml 625B
Maven__commons_collections_commons_collections_3_2_2.xml 616B
Maven__org_junit_jupiter_junit_jupiter_engine_5_7_2.xml 615B
Maven__org_junit_jupiter_junit_jupiter_params_5_7_2.xml 615B
Maven__org_springframework_boot_spring_boot_test_2_5_6.xml 615B
Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_54.xml 611B
Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml 611B
Maven__org_springframework_spring_expression_5_3_12.xml 609B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_14_1.xml 608B
Maven__org_apache_shiro_shiro_crypto_cipher_1_4_1.xml 604B
Maven__com_fasterxml_jackson_core_jackson_core_2_12_5.xml 602B
Maven__org_mockito_mockito_junit_jupiter_3_9_0.xml 598B
Maven__org_junit_jupiter_junit_jupiter_api_5_7_2.xml 594B
Maven__commons_beanutils_commons_beanutils_1_9_3.xml 594B
Maven__org_apache_shiro_shiro_crypto_hash_1_4_1.xml 590B
Maven__org_apache_shiro_shiro_crypto_core_1_4_1.xml 590B
Maven__org_apache_shiro_shiro_config_core_1_4_1.xml 590B
Maven__org_apache_shiro_shiro_config_ogdl_1_4_1.xml 590B
Maven__org_springframework_spring_context_5_3_12.xml 588B
Maven__net_bytebuddy_byte_buddy_agent_1_10_22.xml 585B
Maven__org_springframework_spring_webmvc_5_3_12.xml 581B
Maven__org_springframework_boot_spring_boot_2_5_6.xml 580B
Maven__org_springframework_spring_beans_5_3_12.xml 574B
Maven__org_apache_logging_log4j_log4j_api_2_14_1.xml 573B
共 141 条
- 1
- 2
资源评论
- ollyestn2023-06-17这个算是良心价了吧,给你点个赞
花伤情犹在
- 粉丝: 6w+
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功