shiro过滤器
程序员文章站
2022-04-03 08:53:46
...
文章目录
shiro过滤器
跟认证相关的过滤器
anon:不需要任何认证
authBasic:HttpBasic
authc:需要认证之后才可以访问
user:当前存在用户才可以访问
logout:退出
跟事务权限相关的过滤器
perms:必须具备相关的权限才可以访问
roles:必须具备相关的角色才可以访问
ssl:安全的协议(Https)才可以访问
port:要求端口是“()”后面写端口才可以访问
UserController
// /**
// * 通过注解的方式设置需要的角色
// * @return
// */
// @RequiresRoles("admin")
@RequestMapping(value = "/testRole",method = RequestMethod.GET)
@ResponseBody
public String testRole(){
return "testRole success";
}
@RequestMapping(value = "/testRole1",method = RequestMethod.GET)
@ResponseBody
public String testRole1(){
return "testRole1 success";
}
// /**
// * 通过注解的方式设置需要的权限
// * @return
// */
// @RequiresPermissions("user:add")
@RequestMapping(value = "/testPerms",method = RequestMethod.GET)
@ResponseBody
public String testPerms(){
return "testPerms success";
}
@RequestMapping(value = "/testPerms1",method = RequestMethod.GET)
@ResponseBody
public String testPerms1(){
return "testPerms1 success";
}
spring-shiro.xml
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"></property>
<property name="loginUrl" value="login.html"></property><!-- 没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,不输入地址的话会自动寻找项目web项目的根目录下的”/login.jsp”页面 -->
<property name="unauthorizedUrl" value="403.html"></property><!-- 没有权限默认跳转的页面 -->
<property name="filterChainDefinitions">
<value><!-- 自上到下 --><!-- anon:表示可以匿名使用。 authc:表示需要认证(登录)才能使用,没有参数. roles["admin,guest"],每个参数通过都才算通过,user表示必须存在用户 -->
/login.html = anon <!-- 不需要任何验证,可以直接访问 -->
/subLogin = anon
<!-- /testRole = roles["admin"]
/testRole1 = roles["admin","admin1"]
/testPerms = perms["user:delete"]
/testPerms1 = perms["user:delete","user:update"] -->
/testRole = roles["admin","admin1"]
/testRole1 = rolesOr["admin","admin1"]
/* = authc <!-- 经过认证之后才能访问相应的路径 -->
</value>
</property>
<property name="filters">
<map>
<entry key="rolesOr" value-ref="rolesOrFilter" />
</map>
</property>
</bean>
<!-- 自定义权限filter -->
<bean id="rolesOrFilter" class="com.shiro.filter.RolesOrFilter" />
RolesOrFilter
package com.shiro.filter;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.authz.AuthorizationFilter;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* 自定义的权限过滤器
*
* Filter类型;
* AuthorizationFilter:与授权相关的Filter
* AuthorizationFilter:与认证相关的Filter
* @author Luke
* @date 2018/6/11.
*/
public class RolesOrFilter extends AuthorizationFilter {
@Override
protected boolean isAccessAllowed(ServletRequest request,
ServletResponse response, Object o) throws Exception {
//1.获取主体对象
Subject subject = getSubject(request, response);
//2.获取shiro配置中的角色限制列表 /testRoles1 = rolesOr["admin","admin1"]
String[] roles = (String[]) o;
//3.若角色列表为空,则说明无限制
if (roles == null || roles.length == 0) {
return true;
}
//否则有限制,则判断当前角色是否有对应权限
for (String role : roles) {
if (subject.hasRole(role)) {
return true;
}
}
return false;
}
}
上一篇: H-JavaAPI之过滤器
下一篇: 牛客暑假多校2020第四场H题, 思维题