我没有做它与提出的解决方案的工作,这里是我的发现: (使用春天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