我没有使它与提出的解决方案一起工作,这是我发现的:
(使用弹簧 3.1)。
在您的装配工课程中:
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:/";
}
这里你得到了让它工作的东西,但是你必须检查
hsr.getPathInfo()
看看是否以.css或.js等结尾...
此外,如果登录失败,您应该查看会话属性是否已设置并查看其他特殊情况!
顺便说一句,我的过滤器以前用于格式化 utf-8 中的所有输入/输出。
希望对大家有所帮助。