不明白Filter过滤器怎么用,大家帮帮我

不明白Filter过滤器怎么用,大家帮帮我,第1张

我来给你简单的说一下吧:)

首先要明确。Filter是JSP20里面的东西 ,顾名思义,也就是过滤器的意思

和你说说如何用吧。要用Filter就得在webxml中配置

例:

//配置方法和配置普通的Servlet一样的哦

<filter>

<filter-name>PrivFilter</filter-name>

<filter-class>commyPrivfilterPrivFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>PrivFilter</filter-name>

<url-pattern>/resource/</url-pattern>

</filter-mapping>

//commyPrivfilterPrivFilter是这个过滤器所在的位置。当然这个过滤器必须实现接口javaxservletFilter。

然后就可以在过滤器这个接口方法中增加过滤条件了

public void doFilter(ServletRequset request, ServletResponse response,FilterChain chain)

thows ServletException, IOException{

然后你可以把过滤条件写出来,写在doFilter方法里面

我这里写一个简单的例子:

public void doFilter(ServletRequest req, ServletResponse res,

FilterChain chain) throws IOException, ServletException {

>

DefaultFilter

shiro中提供的默认filter

FilterChainManager

通过配置创建对应的filterChain

Shiro通过此配置可初始化FilterChainManager中的filterChain,结构为 url ->filter列表

SpringShiroFilter

入口filter,拦截所有请求,通过请求的url匹配到对应的filterChain,然后通过Chain对请求进行,认证或者授权的处理

OncePerRequestFilter

OncePerRequestFilter 用于防止多次执行 Filter;也就是说一次请求只会走一次拦截器链;

另外提供 enabled 属性,表示是否开启该拦截器实例

实现了 doFilter 方法,提供了抽象方法 doFilterInternal

在doFilter中验证当前的Filter有没有执行过,如果已经执行过一次或者当前filter被禁用,则直接执行下一个Filter。如果没有执行过则执行 doFilterInternal 方法

AbstractShiroFilter

创建Subject,绑定subject到当前线程,根据url获取filterChain并执行filterChain

PathMatchingFilterChainResolver

通过请求的url来匹配FilterChainManager中的FilterChain,这个方法会返回一个 ProxiedFilterChain

ProxiedFilterChain

存储了tomcat的Filter 和shiro内部的filter

shiro内部的过滤器执行完后会切换到tomcat的过滤器继续执行

默认filter

除了LogoutFilter,其他都继承了AdviceFilter

AdviceFilter

AdviceFilter 提供了 AOP 风格的支持,类似于 SpringMVC 中的 Interceptor:

权限验证在preHandle中实现

PathMatchingFilter

PathMatchingFilter 提供了基于 Ant 风格的请求路径匹配功能及拦截器参数解析的功能,如

/admin roles[admin,user] ”自动根据 “,” 分割,解析成 /admin -> [admin,user] 存入 appliedPaths

实现了 preHandle 方法,通过请求的url匹配url对应的权限,解析权限串 调用子类的 onPreHandle 对权限进行处理

AnonymousFilter

提供匿名访问功能,实现了 onPreHandle 直接返回true,所以配置 anon 的url任何人都可以访问

AccessControlFilter

提供了资源访问控制的基础功能

实现了 onPreHandle ,这里拆分出了

isAccessAllowed (是否允许访问)和 onAccessDenied (访问被拒绝时)这两个方法供子类实现

AuthenticationFilter

实现了 isAccessAllowed 方法,验证用户是否已经登录,没有登录将被拒绝

FormAuthenticationFilter

继承自 AuthenticationFilter 只有用户登录过后才能通过

实现了 onAccessDenied 方法,如果请求的地址是登录地址,这里会尝试自动登录,否则跳转到登录页面

Basic>

以上就是关于不明白Filter过滤器怎么用,大家帮帮我全部的内容,包括:不明白Filter过滤器怎么用,大家帮帮我、想用spring mvc 的拦截器获取URL中的参数,在preHandle方法中从request里获取不到值、Shiro中的filter等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9678940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)