在没有Web.xml的JAX-RS上使用Shiro过滤器

时间:2016-05-25 14:01:35

标签: java web-services rest shiro

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

1 个答案:

答案 0 :(得分:2)

您可以在应用程序中添加Web描述符。根据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 {
}

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