我有一个Spring控制器,它在会话中放置一个变量:
public class LoginFormController extends SimpleFormController {
public ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command) throws Exception {
request.getSession().setAttribute("authenticated_user", "authenticated_user");
}
}
然后我有一个HandlerInterceptor。在preHandle方法中,我检查会话中的变量:
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
/* first, check if the requested view even required authentication */
if (isAuthenticationRequired(request)) {
/* check to see that user is logged in */
if (null == request.getSession().getAttribute("authenticated_user")) {
forwardToLogonPage(request, response);
return false;
}
/* all is ok - pass the request on */
return true;
}
/* all is ok - pass the request on */
return true;
}
问题是似乎没有设置会话变量,因为request.getSession()。getAttribute(“authenticated_user”))总是解析为null。
有什么想法吗?
谢谢, Krt_Malta
答案 0 :(得分:0)
尝试使用throw new ModelAndViewDefiningException(new ModelAndView("logonPage"))
代替return false
。
在您的logonPage中,明确地在表单标记中包含操作,如下所示:
<form:form method="post" commandName="login" action="logonPage.htm">
答案 1 :(得分:0)
您还可以注入ServletRequestAttributes。 包括:
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
我是在一个抽象的超级控制器中完成的,所以我的所有控制器都可以识别servlet请求。
要提取您使用的Request对象,可以使用以下
protected ServletRequestAttributes getServletRequest(){
return (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
}