我沒有做它與提出的解決方案的工作,這裏是我的發現: (使用春天3.1)。
在你fitler類:
CharsetFilter implements Filter {
@OVerride public void doFilter(ServletRequest request, ServletResponse response, FilterChain next) throws IOException, ServletException {
HttpServletRequest hsr = (HttpServletRequest) request;
if (hsr.getUserPrincipal() == null) {
HttpSession session = hsr.getSession();
if (!(hsr == null)) {
logger.info("path : " + hsr.getPathInfo());
session.setAttribute("beforeLoginUrl", hsr.getPathInfo());
}
}
}
然後我你的web.xml中聲明你的過濾器:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter>
<filter-name>charsetFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>com.ent.foo.CharsetFilter</filter-class>
<init-param>
<param-name>requestEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
在成功登錄後,您重定向URL
然後,只需獲得HttpSession中回:
@RequestMapping(value = "successful")
public void showSuccessfulogin (HttpSession session) {
String redirectUrl = (String) session.getAttribute("beforeLoginUrl");
if (redirectUrl != null) {
session.removeAttribute("beforeLoginUrl");
return "redirect:" + redirectUrl;
}
return "redirect:/";
}
在這裏你得到的東西,使其工作,但你會h AVE檢查
hsr.getPathInfo()
,看看它是否具有的CSS或.js文件,等結束...
此外,如果登錄失敗,你應該看到,如果會話屬性已經設置並查看任何其他特殊情況!
Btw我的過濾器曾用於utf-8格式化所有輸入/輸出。
希望它會幫助任何。
我認爲你必須創建兩個不同的登錄頁面,並帶有相應的過濾器。 – 2011-03-22 09:48:23
Alois,感謝您的迴應,您是否知道這樣做的一個例子。我是春季安全新手......謝謝! – c12 2011-03-22 09:55:40