苏州华亭建设工程有限公司网站,丹东供求园,做网站需要的硬件,做一个企业的网站怎么做的整合ShiroJwt大体思路
springboot整合shiro大体上的思路#xff1a;
1.自定义一个类Realm extends AuthorizingRealm{}
主要是对token授权和认证
重写2个方法
doGetAuthorizationInfo //授权
doGetAuthenticationInfo //认证
认证 代码中手动加上对token校验的判断2.自…整合ShiroJwt大体思路
springboot整合shiro大体上的思路
1.自定义一个类Realm extends AuthorizingRealm{}
主要是对token授权和认证
重写2个方法
doGetAuthorizationInfo //授权
doGetAuthenticationInfo //认证
认证 代码中手动加上对token校验的判断
2.自定义一个Configuration类ShiroConfig
ShiroConfig类主要做3个事情
将自定义的Realm注册bean
将realm对象与securityManager对象关联
securityManager.setRealm(realm);
将securityManager对象与ShiroFilterFactoryBean对象关联
shiroFilterFactoryBean.setSecurityManager(getDefaultWebSecurityManager); 3.整合jwt
先定义公共类JwtUtils
其中定义三个方法 作用分别为token生成 token校验 token是否过期 在realm类的认证doGetAuthenticationInfo方法中调用JwtUtils解析token和登录用户是否满足条件
满足则返回AuthenticationInfo对象 对象中包含profile token name
(只需要定义个profile就好了 profile就是登录的用户信息 可以再定义一个用户实体类 把用户信息放入实体类中那这个对象类就是profile)
边学边整理思路 详细的得边敲边看代码 Shiro整合JWT的两种方式
1.通过URL进行权限控制
配置方式 在Shiro的配置文件通常是shiro.ini或shiro-config.xml中配置URL路径与权限的映射关系。这个配置指定了哪些URL需要哪些权限。
!-- shiro.ini或shiro-config.xml配置示例 --
property namefilterChainDefinitions!-- URL路径与权限的映射关系 --/admin/** roles[admin], perms[user:delete]/user/** authc
/property代码示例 在Java代码中只需配置Shiro的FilterChainDefinitionMap将URL路径和权限映射起来。
MapString, String filterChainDefinitionMap new LinkedHashMap();
filterChainDefinitionMap.put(/admin/**, roles[admin]);
filterChainDefinitionMap.put(/user/**, authc);特点
静态配置权限规则在配置文件中静态定义不易动态改变。适用于简单的权限需求不需要频繁修改权限规则。 2.通过注解进行权限控制
配置方式 在需要进行权限控制的Controller类或方法上使用Shiro提供的注解如RequiresRoles和RequiresPermissions。
Controller
RequestMapping(/admin)
public class AdminController {RequiresRoles(admin)GetMapping(/view)public String adminView() {// 处理业务逻辑return admin/view;}
}特点
动态控制权限规则可以根据方法的注解动态变化不需要重新配置。精细控制可以根据方法级别的注解进行更精细的权限控制。
3.配置文件和注解的关系
在项目中通常会将基本的URL路径与权限的映射关系配置在配置文件中这些是项目的基础权限。然后通过注解在Controller中进行更精细的权限控制例如限制某个Controller的某个方法需要特定的角色或权限。
!-- shiro.ini或shiro-config.xml配置示例 --
property namefilterChainDefinitions!-- URL路径与基本权限的映射关系 --/admin/** roles[admin], perms[user:delete]/user/** authc
/propertyController
RequestMapping(/admin)
public class AdminController {RequiresRoles(admin)GetMapping(/view)public String adminView() {// 处理业务逻辑return admin/view;}
}这种组合方式可以实现项目中灵活的权限控制基本权限由配置文件定义而特殊权限由注解在代码中控制使得权限管理更加清晰和可维护。
通过这种组合方式您可以在项目中实现动态和精细的权限管理同时保持基本权限的静态配置以适应不同的权限需求。
对比说明
1. 通过URL进行权限控制
首先配置Shiro的过滤器和URL拦截规则然后在控制器中添加注解。
Shiro配置文件 (shiro.ini 或 shiro-config.xml):
!-- 配置JWTFilter用于处理JWT的生成、解析和验证 --
bean idjwtFilter classcom.example.JWTFilter/bean!-- 配置Shiro过滤器链 --
filter-mappingsfilter-namejwtFilter/filter-nameurl-pattern/api/**/url-pattern
/filter-mappings控制器 (AdminController.java):
Controller
RequestMapping(/admin)
public class AdminController {// 需要admin:view权限才能访问GetMapping(/view)public String view() {return admin/view;}// 其他业务方法
}2. 通过注解进行权限控制
在控制器方法上添加Shiro的注解来声明需要的角色或权限。
控制器 (AdminController.java):
Controller
RequestMapping(/admin)
public class AdminController {RequiresPermissions(admin:view) // 使用注解声明需要admin:view权限GetMapping(/view)public String view() {return admin/view;}// 其他业务方法
}上述代码演示了通过URL控制和通过注解控制权限的两种方式。通过URL控制更加基于URL模式适用于相对简单的权限需求可以在配置文件中进行集中管理。通过注解控制更加直观能够明确指定每个方法的权限要求适用于需要细粒度控制的情况。 合二为一
Shiro配置文件 (shiro.ini 或 shiro-config.xml):
!-- 配置JWTFilter用于处理JWT的生成、解析和验证 --
bean idjwtFilter classcom.example.JWTFilter/bean!-- 配置Shiro过滤器链 --
filter-mappingsfilter-namejwtFilter/filter-nameurl-pattern/api/**/url-pattern
/filter-mappings控制器 (AdminController.java):(注意两种方式代码基本一致只是注释有区别)
Controller
RequestMapping(/admin)
public class AdminController {RequiresPermissions(admin:view) // 使用注解声明需要admin:view权限GetMapping(/view)public String view() {return admin/view;}// 其他业务方法例如编辑管理员信息需要admin:edit权限RequiresPermissions(admin:edit)GetMapping(/edit)public String edit() {return admin/edit;}// 删除管理员需要admin:delete权限RequiresPermissions(admin:delete)GetMapping(/delete)public String delete() {return admin/delete;}// 其他业务方法
}在上述示例中我们添加了更多的业务方法如编辑管理员信息和删除管理员并使用Shiro的RequiresPermissions注解明确指定每个方法需要的权限要求。例如edit方法需要admin:edit权限delete方法需要admin:delete权限。