Я использую JAX-RS, и у меня есть служба отдыха, которую я хотел бы защитить с помощью shiro basic auth. В настоящее время у меня есть класс, который расширяет приложение в соответствии с спецификацией Servlet 3, и все работает нормально. Кажется, я не могу заставить базовый auth фильтр Shiro работать, и поскольку у меня нет web.xml, он не позволит мне добавить цепочку фильтров. Есть ли способ программно добавить фильтр в мой подпроцесс приложения?Использование фильтров Shiro на JAX-RS без Web.xml
0
A
ответ
2
Вы можете добавить веб-дескриптор в свое приложение. Согласно спецификациям Servlet 3.0, web.xml является необязательным и просто расширяет и/или отменяет вашу конфигурацию аннотации.
Затем вы можете определить фильтр Сиро в вашем web.xml, как обычно, и связанная с 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 {
}
Я не тестировал этот код выше, это всего лишь подход.