标签:string log pac 页面重定向 十分 问控制 常用 分享 filter
一 .概述
在上一节之中,我们说到shiro使用过滤器完成整个web的权限管理.
现在我们来看一下ShiroFilter的一些内容.
二 . 配置内容解析
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"></property> <!-- 配置登录页面 --> <property name="loginUrl" value="/login"></property> <!-- 配置未授权页面的路径 --> <property name="unauthorizedUrl" value="/unan.jsp"></property> <!-- 配置登录成功的页面 --> <property name="successUrl" value="/WEB-INF/success.jsp"></property> <!-- 配置过滤器链 这是shiro的web配置的核心 --> <property name="filterChainDefinitions"> <value> /login=anon /js/**=anon /**=authc </value> </property> </bean>
我们在ShiroFilter之中配置了一个SecurityManager,也就是说ShiroFilter还是使用SecurityManager来完成整个shiro的运转流程.
我们看到我们配置一个URL,这些URL是shiroFilter内置的一些配置信息.
(1)loginUrl: 表示当shiroFilter发现用户没有认证过,自动跳转到该URl之中完成认证操作.
(2)unauthorizedUrl : 表示shiro发现用户访问了一个自己无权限的资源的时候,就会将页面重定向到未授权页面.
(3)successUrl : 表示用户登录成功之后重定向的页面,一般情况我们不使用这个配置.
在shiroFilter之中,最为重要的就是filertChain这个概念了.
shiro也是使用过滤链的方式完成操作的.
配置的内容为 : url = 过滤器1,过滤器2 这样的模式.
三 .ShiroFilter的结构
我们看到上面的类继承结构,我们需要注意的是下面的几个过滤器.
(1)NameableFilter: 名称过滤器,我们二部分的anon这样的名字就是通过这个过滤器完成的识别工作.
(2)AccessControllerFilter : 访问控制过滤器,这个过滤器是我们以后自定义Filter需要继承的Filter.
我们来看一下AccessControllerFilter这个类:
我们只看需要重写的方法:
public abstract class AccessControlFilter extends PathMatchingFilter {
protected abstract boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception;
protected abstract boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception;
}
我们来看一下上面的两个方法:
(1)isAccessAllowed():这个方法是通过参数完成是否允许成功过滤的方法.
前面拿到request和respones参数我们十分熟悉,只是最有的一个mappedValue参数我们不熟悉.
看到这样的配置: /user=roles[admin] ,其中mappedValue就代表这个admin,其实就是一个String[].
之所以是数组,就是代表可以有多个.
该方法返回true,表示可以继续过滤.返回false,表示进入onAccessDenied()方法.
(2)onAccessDenied()方法:当该过滤器不允许过滤的时候会进入该方法之中,我们可以从这个方法之中编写自己的逻辑.
四 .内置过滤器
在最上面我们编写了anon这样的内置过滤器,现在我们介绍一下常用的过滤器.
(1)anno: 匿名方法,表示用户不需要任何认证(当然也不需要权限)就能进行访问.
(2)authc : 表示需要经过认证才能进行访问.
(3)roles: 表示用户需要拥有对应的角色才能访问
(4)perms : 表示用户需要有对应的权限才能访问.
下面我们来演示一下上面最常用的过滤器:
/login=anon /authc=authc /user=roles[admin] /user/add=perms[admin:add]
在上面我们配置了四类我们最为常用的过滤器:
(1)anon 表示可以匿名访问
(2)authc : 表示需要认证之后才能访问
(3)roles:表示需要具有角色才能访问
(4)perms:表示需要一定的权限才能访问.
@RestController public class FilterController { @RequestMapping("/anon") public String anon() { return "anon"; } @RequestMapping("/authc") public String authc() { return "authc"; } @RequestMapping("/user") public String user() { return "user"; } @RequestMapping("/user/add") public String userAdd() { return "user:add"; } }
我们编写对应的Controller.看是否能够实现URL拦截的方式.
因为我们的URL都被配置需要一定的权限才能访问,现在我们的URL就被保护了.
标签:string log pac 页面重定向 十分 问控制 常用 分享 filter
原文地址:https://www.cnblogs.com/trekxu/p/9057975.html