2016-05-25 13 views
0

Ich benutze JAX-RS und ich habe einen Rest-Service, den ich mit Shiro Basic Auth sichern möchte. Ich habe derzeit eine Klasse, die Anwendung gemäß der Servlet 3-Spezifikation erweitert und alles läuft gut. Ich kann nicht scheinen, Shiro grundlegenden auth Filter zu arbeiten, und da ich keine web.xml habe, lässt es mich nicht eine Filterkette dort hinzufügen. Gibt es eine Möglichkeit, einen Filter in meiner Anwendungsunterklasse programmatisch hinzuzufügen?Verwenden eines Shiro-Filters auf JAX-RS ohne Web.xml

Antwort

2

Sie könnten Ihrer Anwendung einen Webdeskriptor hinzufügen. Gemäß den Servlet 3.0-Spezifikationen ist web.xml optional und erweitert und/oder überschreibt Ihre Annotationskonfiguration.

Sie könnten dann wie gewohnt einen Shiro-Filter in Ihrer web.xml definieren und die JAX-RS-bezogene Konfiguration bleibt über Anmerkungen konfiguriert. Dies ist ein natürlicher Ansatz.

<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> 

Wenn es nicht eine Option für Sie ist und Sie nicht wollen, web.xml in der Anwendung auftreten, können Sie auch von ShiroFilter Klasse erweitern und Ihre eigene Anmerkung Konfigurationen bereitstellen, um Shiro Filter gekettet werden :

@WebFilter(initParams = { @WebInitParam(name = "configPath", value = "classpath:shiro.ini") }) 
public class MyShiroFilter extends ShiroFilter { 
} 

Ich habe diesen Code oben nicht getestet, das ist nur ein Ansatz.