springboot整合shiro大体上的思路:
主要是对token授权和认证
重写2个方法
doGetAuthorizationInfo //授权
doGetAuthenticationInfo //认证 认证 代码中手动加上对token校验的判断
ShiroConfig类主要做3个事情
将自定义的Realm注册bean
将realm对象与securityManager对象关联
securityManager.setRealm(realm);
将securityManager对象与ShiroFilterFactoryBean对象关联
shiroFilterFactoryBean.setSecurityManager(getDefaultWebSecurityManager);
先定义公共类JwtUtils
其中定义三个方法 作用分别为token生成 token校验 token是否过期
在realm类的认证doGetAuthenticationInfo方法中调用JwtUtils解析token和登录用户是否满足条件
满足则返回AuthenticationInfo对象 对象中包含profile token name
(只需要定义个profile就好了 profile就是登录的用户信息 可以再定义一个用户实体类 把用户信息放入实体类中那这个对象类就是profile)
边学边整理思路 详细的得边敲边看代码
/admin/** = roles[admin], perms["user:delete"]
/user/** = authc
代码示例: 在Java代码中,只需配置Shiro的FilterChainDefinitionMap,将URL路径和权限映射起来。
Map filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/admin/**", "roles[admin]");
filterChainDefinitionMap.put("/user/**", "authc");
特点:
@RequiresRoles
和@RequiresPermissions
。@Controller
@RequestMapping("/admin")
public class AdminController {
@RequiresRoles("admin")
@GetMapping("/view")
public String adminView() {
// 处理业务逻辑
return "admin/view";
}
}
特点:
/admin/** = roles[admin], perms["user:delete"]
/user/** = authc
@Controller
@RequestMapping("/admin")
public class AdminController {
@RequiresRoles("admin")
@GetMapping("/view")
public String adminView() {
// 处理业务逻辑
return "admin/view";
}
}
这种组合方式可以实现项目中灵活的权限控制,基本权限由配置文件定义,而特殊权限由注解在代码中控制,使得权限管理更加清晰和可维护。
通过这种组合方式,您可以在项目中实现动态和精细的权限管理,同时保持基本权限的静态配置,以适应不同的权限需求。
首先,配置Shiro的过滤器和URL拦截规则,然后在控制器中添加注解。
Shiro配置文件 (shiro.ini 或 shiro-config.xml):
jwtFilter
/api/**
控制器 (AdminController.java):
@Controller
@RequestMapping("/admin")
public class AdminController {
// 需要admin:view权限才能访问
@GetMapping("/view")
public String view() {
return "admin/view";
}
// 其他业务方法
}
在控制器方法上添加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模式,适用于相对简单的权限需求,可以在配置文件中进行集中管理。通过注解控制更加直观,能够明确指定每个方法的权限要求,适用于需要细粒度控制的情况。
jwtFilter
/api/**
@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
权限。