我正在使用JAX-RS,我有一个休息服务,我想使用shiro basic auth保护。我目前有一个类根据Servlet 3规范扩展Application,一切运行正常。我似乎无法使Shiro基本身份验证过滤器工作,因为我没有web.xml,它不会让我在那里添加过滤器链。有没有办法在我的应用程序子类中以编程方式添加过滤器?
答案 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 {
}
我没有测试上面的代码,这只是一种方法。