springboot过滤器排除掉一些url_理解这9大内置过滤器,才算是精通Shiro

小Hub领读:

权限框架一般都是一堆过滤器、拦截器的组合运用,在shiro中,有多少个内置的过滤器你知道吗?在哪些场景用那些过滤器,这篇文章希望你能对shiro有个新的认识!

别忘了,点个 [在看] 支持一下哈~


前两篇原创shiro相关文章:

1、极简入门,Shiro的认证与授权流程解析

2、只需要6个步骤,springboot集成shiro,并完成登录


我们都知道shiro是个认证权限框架,除了登录、退出逻辑我们需要侵入项目代码之外,验证用户是否已经登录、是否拥有权限的代码其实都是过滤器来完成的,可以这么说,shiro其实就是一个过滤器链集合。

那么今天我们详细讨论一下shiro底层到底给我们提供了多少默认的过滤器供我们使用,又都有什么用呢?带着问题,我们先去shiro官网看看对于默认过滤器集的说明。

  • http://shiro.apache.org/web.html#default-filters
When running a web-app, Shiro will create some useful default Filter instances and make them available in the [main] section automatically. You can configure them in main as you would any other bean and reference them in your chain definitions.
The default Filter instances available automatically are defined by the DefaultFilter enum and the enum’s name field is the name available for configuration.

翻译过来意思:

当运行web应用程序时,Shiro将创建一些有用的默认过滤器实例,并使它们在[main]部分自动可用。您可以像配置任何其他bean一样在main中配置它们,并在链定义中引用它们。

默认筛选器实例由DefaultFilter enum中定义,enum s name字段是可用于配置的名称。

于是我看了一下DefaultFilter的源码:

public enum DefaultFilter {

    anon(AnonymousFilter.class),
    authc(FormAuthenticationFilter.class),
    authcBasic(BasicHttpAuthenticationFilter.class),
    logout(LogoutFilter.class),
    noSessionCreation(NoSessionCreationFilter.class),
    perms(PermissionsAuthorizationFilter.class),
    port(PortFilter.class),
    rest(HttpMethodPermissionFilter.class),
    roles(RolesAuthorizationFilter.class),
    ssl(SslFilter.class),
    user(UserFilter.class);

    ...
}

终于知道我们常用的anon、authc、perms、roles、user过滤器是哪里来的了!这些过滤器我们都是可以直接使用的。但你要弄清楚这些默认过滤器,你还不得不去深入了解一下shiro更底层为我们提供的过滤器,基本我们的这些默认过滤器都是通过继承这几个底层过滤器演变而来的。

那么这些过滤器都有哪些呢?我们来看一个图:

5aa5fc8b534cb8228a69a09ee937c383.png

上面我标记了7个我们接下来要介绍的过滤器,我们一个个来介绍,弄清楚这些过滤器之后,相信你对shiro的认识会更深一层了。具体authc、perms、roles等这些默认过滤器与这7个过滤器有什么关系你就会明白。

1、AbstractFilter

这个过滤器还得说说,shiro最底层的抽象过滤器,虽然我们极少直接继承它,它通过实现Filter获得过滤器的特性。

7864fb963c2674bd4e880d431b40316e.png

完成一些过滤器基本初始化操作,FilterConfig:过滤器配置对象,用于servlet容器在初始化期间将信息传递给其他过滤器。

2、NameableFilter

命名过滤器,给过滤器定义名称!也是比较基层的过滤器了,未拓展其他功能,我们很少会直接继承这个过滤器。为重写doFilter方法。

f62ffc3c9241c0e13714ec88034ec460.png

3、OncePerRequestFilter

9a31b415c2ffe1946d28ca5a7d4bccc9.png

重写doFilter方法,保证每个servlet方法只会被过滤一次。可以看到doFilter方法中,第一行代码就是String alreadyFilteredAttributeName = getAlreadyFilteredAttributeName();然后通过request.getAttribute(alreadyFilteredAttributeName) != nu

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中,可以通过配置过滤器来过滤静态资源。以下是实现步骤: 1. 创建过滤器 创建一个实现javax.servlet.Filter接口的过滤器类,例如: ```java import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter(urlPatterns = "/*") public class StaticResourceFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // 初始化方法 } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 过滤逻辑 chain.doFilter(request, response); } @Override public void destroy() { // 销毁方法 } } ``` 2. 注册过滤器 在启动类上添加`@ServletComponentScan`注解,以扫描并注册过滤器。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication @ServletComponentScan public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 3. 配置静态资源路径 在application.properties文件中配置静态资源路径,例如: ``` spring.resources.static-locations=classpath:/static/ ``` 4. 配置过滤器排除静态资源 在过滤器的`doFilter`方法中,可以通过HttpServletRequest的getRequestURI()方法获取请求的URI,然后判断是否需要过滤静态资源。例如: ```java @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; String requestUri = httpRequest.getRequestURI(); // 判断是否需要过滤静态资源 if (!requestUri.startsWith("/static/")) { chain.doFilter(request, response); } } ``` 通过以上步骤,你可以配置一个过滤器来过滤静态资源。注意,如果你使用了Spring Security等安全框架,可能需要在配置排除静态资源的路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值