我正在使用 JAX-RS,并且我有一个休息服务,我想使用 shiro basic auth 来保护该服务。我目前有一个根据 Servlet 3 规范扩展应用程序的类,并且一切运行良好。我似乎无法让 Shiro 基本身份验证过滤器工作,并且由于我没有 web.xml,它不会让我在那里添加过滤器链。有没有办法以编程方式在我的应用程序子类中添加过滤器?
最佳答案
您可以将 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 {
}
我没有测试上面的代码,这只是一种方法。
关于java - 在没有 Web.xml 的 JAX-RS 上使用 Shiro 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37439494/