2010-11-06 14 views
1

我使用JAX-RS Jersey作爲我的控制器,JSP用於我的視圖。這裏有一個例子:Java Servlets,JAX-RS - 獲取基於表單的認證工作時出現問題

@Path("/") 
@Stateless 
public class HomeController { 

    @Context 
    private HttpServletRequest request; 

    @EJB 
    private EmployeeServiceLocal employeeService; 

    @GET 
    public Viewable getHomePage() { 
     Employee employee = employeeService.getEmployeeById(1); 
     request.setAttribute("employee", employee); 
     return new Viewable("/home.jsp", null); 
    } 
} 

一切都已經運行很好,很正常,直到我試圖用JAAS來實現認證。我相信發生的事情是我的過濾器阻止服務器處理我的j_security_check請求(我正在使用基於jdbcRealm的基於表單的身份驗證)。我相信這是因爲我在提交我的登錄表單時出現以下錯誤:

The requested resource() is not available. 

這是否有意義?我如何讓我的過濾器不適用於/ j_security_check?

這是在web.xml我的過濾器配置

<filter> 
    <filter-name>Jersey Filter</filter-name> 
    <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class> 
    <init-param> 
    <param-name>com.sun.jersey.config.feature.Redirect</param-name> 
    <param-value>true</param-value> 
    </init-param> 
    <init-param> 
    <param-name>com.sun.jersey.config.property.packages</param-name> 
    <param-value>cheetah.frontend.controllers</param-value> 
    </init-param> 
    <!-- pass to next filter if Jersey/App returns 404 --> 
    <init-param> 
    <param-name>com.sun.jersey.config.feature.FilterForwardOn404</param-name> 
    <param-value>true</param-value> 
    </init-param> 
    <!-- match regex to determine if Jersey/App is invoked or pass to next filter --> 
    <init-param> 
    <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name> 
    <param-value>/(images|css|jsp)/.*</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>Jersey Filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

感謝您的幫助。

回答

0

一個類似的代碼在GlassFish中爲我工作(appserver甚至沒有將j_security_check調用傳遞給servlet並自行處理它)。你是否包含了登錄配置並在你的web.xml中設置了auth安全約束?你在使用哪個應用服務器?