我想在j_security_check上執行過濾器來執行一些登錄後操作,如更改重定向網址等。但問題是我的過濾器永遠不會執行。任何拼湊,我可以申請?任何幫助,將不勝感激。我真的厭倦了容器管理的安全性。在j_security_check上過濾不起作用。 Glassfish V3 Netbeans 6.8
在此先感謝。
我想在j_security_check上執行過濾器來執行一些登錄後操作,如更改重定向網址等。但問題是我的過濾器永遠不會執行。任何拼湊,我可以申請?任何幫助,將不勝感激。我真的厭倦了容器管理的安全性。在j_security_check上過濾不起作用。 Glassfish V3 Netbeans 6.8
在此先感謝。
恕我直言,你不應該試圖攔截容器的認證系統;在你的情況下,重定向URL可以在web.xml中聲明設置。
如果你想執行一些認證後的動作,我建議設置一個虛擬的post-auth servlet/jsp,它可以做你想做的事,然後重定向到請求的資源。然後可以將post-auth servlet正確配置爲登錄後頁面。
您不能編程掛鉤/j_security_check
。這是一個安全限制。
您最好的辦法是通過手動檢查HttpSession
中的用戶主體來確定首次登錄,並在缺席時將其放在那裏,然後執行您的操作。我在here之前發佈了類似的答案。以下是過濾器代碼的摘錄,您只需將過濾器映射到所需的覆蓋受保護頁面的url-pattern
即可。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest httpRequest = (HttpServletRequest) request;
UserPrincipal user = httpRequest.getUserPrincipal();
HttpSession session = httpRequest.getSession();
if (user != null && session.getAttribute("user") == null) {
session.setAttribute("user", user);
// First-time login. You can do your intercepting thing here.
}
chain.doFilter(request, response);
}
Hi BalusC, 其實我想根據他/她的角色將用戶重定向到合適的位置。這就是爲什麼我想保留一個過濾器,以查看j_security_check在會話/請求URL重定向中設置了所有變量。我終於找到了答案。這是一種補丁工作,但它更重要的工作:) 請參閱此鏈接,請評論你對我的方法有什麼看法: - http://stackoverflow.com/questions/2478770/servlet-security-question-about- j-security-check-j-username-and-j-password/2493525#2493525 – TCM 2010-03-22 15:57:24
你可以在過濾器中完成它。將'response'返回到'HttpServletResponse'並調用'sendRedirect()'。 Scriptlets是不好的做法。 – BalusC 2010-03-22 16:03:18
雅肯定!我會考慮到這一點。除了過濾之外,我還可以保留一個簡單的servlet。 Anywys,重要的是現在我可以休息。我從字面上搜索了谷歌上的每一個鏈接,看看我是否可以在這裏和那裏設置一些屬性,它應該開始工作。但遺憾的是我沒有找到任何這樣的鏈接。然後,我張貼在stackoverflow上,在這裏我也沒有迴應。所以,我非常失望,那麼今天我開始關注Spring的安全性,看看它能提供什麼,但最後這個想法給我留下了深刻印象,現在我可以休息並讓容器處理所有事情。 – TCM 2010-03-22 16:08:52
一種便攜式解決方案。
在模式/ *上註冊全局過濾器;嘗試從會話(即用戶工作區)獲取自定義對象;在doFilter()中嘗試從會話(即用戶工作區)獲取自定義對象。
如果object爲null,則將新對象放入會話並執行登錄後邏輯。
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain
) throws IOException, ServletException
{
Principal principal = request.getUserPrincipal();
if(principal != null) {
UserWorkspace uwks = (UserWorkspace) getSession(request).getAttribute("com.foo.myproject.userworkspace");
if (uwks == null) {
uwks = new UserWorkspace(principal);
getSession(request).setAttribute("com.foo.myproject.userworkspace", uwks);
//
// post-login code here
//
}
}
chain.doFilter(request, response);
}
嗨奧利弗, 據我所知,我們不能設置在web.xml重定向URL。我有不同的角色。例如。管理員和一般。您是否可以在登錄web.xml中的這兩個角色後爲相同的登錄頁面設置成功url?因此,如果管理員登錄,他應該重定向到/Admin/home.jsp,並且對於常規,它應該是/General/home.jsp等。在我看來,這根本不可能。這就是爲什麼我試圖在j_security_check上保留一個過濾器。不過,如果我錯過了一些東西,請告訴我。 – TCM 2010-03-22 15:54:35