【问题标题】:Using a Shiro Filter on JAX-RS without Web.xml在没有 Web.xml 的 JAX-RS 上使用 Shiro 过滤器
【发布时间】:2016-09-23 04:43:47
【问题描述】:

我正在使用 JAX-RS,并且我有一个休息服务,我想使用 shiro 基本身份验证来保护它。我目前有一个根据 Servlet 3 规范扩展 Application 的类,并且一切运行良好。我似乎无法让 Shiro 基本身份验证过滤器工作,因为我没有 web.xml,它不会让我在那里添加过滤器链。有没有办法以编程方式在我的应用程序子类中添加过滤器?

【问题讨论】:

    标签: java web-services rest shiro


    【解决方案1】:

    您可以向您的应用程序添加一个网络描述符。根据 Servlet 3.0 规范,web.xml 是可选的,只是扩展和/或覆盖您的注释配置。

    然后,您可以像往常一样在 web.xml 中定义 Shiro 过滤器,并且 JAX-RS 相关配置将通过注释保持配置。这是一种自然的方法。

    <filter>
        <filter-name>ShiroFilter</filter-name>
        <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
        <init-param>
            <param-name>configPath</param-name>
            <param-value>classpath:shiro.ini</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>ShiroFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>
    

    如果这不是您的选择,并且您不希望 web.xml 在您的应用程序中出现,您还可以从 ShiroFilter 类扩展并提供您自己的注释配置,以便链接 Shiro 过滤器:

    @WebFilter(initParams = { @WebInitParam(name = "configPath", value = "classpath:shiro.ini") })
    public class MyShiroFilter extends ShiroFilter {
    }
    

    我没有测试上面的代码,这只是一种方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-30
      • 2015-03-02
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 2015-06-26
      • 2018-01-15
      • 1970-01-01
      相关资源
      最近更新 更多