shiro过滤器

文章目录

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;
    }
}

猜你喜欢

转载自blog.csdn.net/amoscxy/article/details/82781242