【问题标题】: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 {
}
我没有测试上面的代码,这只是一种方法。