微服务 教程
1085个小节阅读:195.9k
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
Shiro可以根据用户拥有的权限,控制具体资源的访问,这一过程称为鉴权。在Shiro中,可以通过过滤器进行鉴权配置:
过滤器 | 过滤器类 | 说明 |
---|---|---|
roles | RolesAuthorizationFilter | 角色授权过滤器,验证用户是否拥有某角色 |
perms | PermissionsAuthorizationFilter | 权限授权过滤器,验证用户是否拥有某权限 |
port | PortFilter | 端口过滤器,表示可以通过的端口,如果配置端口为80,而用户访问该页面是非80,自动将请求端口改为80并重定向到该80端口 |
rest | HttpMethodPermissionFilter | rest风格过滤器,自动根据请求方法构建权限字符串 |
ssl | SslFilter | SSL过滤器,只有请求协议是https才能通过,否则自动跳转会https端口(443) |
xxxxxxxxxx
// 配置过滤器
public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager){
// 1.创建过滤器工厂
ShiroFilterFactoryBean filterFactory=new ShiroFilterFactoryBean();
// 2.过滤器工厂设置SecurityManager
filterFactory.setSecurityManager(securityManager);
// 3.设置shiro的拦截规则
Map<String,String> filterMap=new HashMap<>();
// 不拦截的资源
filterMap.put("/login.html","anon");
filterMap.put("/fail.html","anon");
filterMap.put("/user/login","anon");
filterMap.put("/css/**","anon");
// 鉴权过滤器,要写在/**之前,否则认证都无法通过
filterMap.put("/reportform/find", "perms[/reportform/find]");
filterMap.put("/salary/find", "perms[/salary/find]");
filterMap.put("/staff/find", "perms[/staff/find]");
// 其余资源都需要认证,authc过滤器表示需要认证才能进行访问; user过滤器表示配置记住我或认证都可以访问
// filterMap.put("/**","authc");
filterMap.put("/user/pay","authc");
filterMap.put("/**", "user");
// 4.将拦截规则设置给过滤器工厂
filterFactory.setFilterChainDefinitionMap(filterMap);
// 5.登录页面
filterFactory.setLoginUrl("/login.html");
return filterFactory;
}
// 编写测试控制器
public class MyController {
"/reportform/find") (
public String findReportform(){
return "查询报表";
}
"/salary/find") (
public String findSalary(){
return "查询工资";
}
"/staff/find") (
public String findStaff(){
return "查询员工";
}
}
此时如果权限不足会抛出401异常,我们可以自定义权限不足的跳转页面:
编写权限不足页面
xxxxxxxxxx
<html lang="en">
<head>
<meta charset="UTF-8">
<title>权限不足</title>
</head>
<body>
<h1>您的权限不足,请联系管理员!</h1>
</body>
</html>
配置权限不足的跳转页面
xxxxxxxxxx
// 配置过滤器
public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager){
// 1.创建过滤器工厂
ShiroFilterFactoryBean filterFactory=new ShiroFilterFactoryBean();
// 2.过滤器工厂设置SecurityManager
filterFactory.setSecurityManager(securityManager);
// 3.设置shiro的拦截规则
Map<String,String> filterMap=new HashMap<>();
// 不拦截的资源
filterMap.put("/login.html","anon");
filterMap.put("/fail.html","anon");
filterMap.put("/noPermission.html","anon");
filterMap.put("/user/login","anon");
filterMap.put("/css/**","anon");
// 鉴权过滤器
filterMap.put("/reportform/find", "perms[/reportform/find]");
filterMap.put("/salary/find", "perms[/salary/find]");
filterMap.put("/staff/find", "perms[/staff/find]");
// 其余资源都需要认证,authc过滤器表示需要认证才能进行访问; user过滤器表示配置记住我或认证都可以访问
// filterMap.put("/**","authc");
filterMap.put("/user/pay","authc");
filterMap.put("/**", "user");
// 4.将拦截规则设置给过滤器工厂
filterFactory.setFilterChainDefinitionMap(filterMap);
// 5.登录页面
filterFactory.setLoginUrl("/login.html");
// 6.权限不足访问的页面
filterFactory.setUnauthorizedUrl("/noPermission.html");
return filterFactory;
}
实时效果反馈
1. 在Shiro中,perms
过滤器表示
A 无需认证即可访问
B 需要登录认证才能访问
C 需要登录认证或记住我认证才能访问
D 需要特定权限才能访问
答案
1=>D