我的项目中有这两个类。当我在配置中使用它们时,我不能提交项目的登录表单。在填写我的凭据并单击login之后,我尝试调试应用程序,并意识到表单没有命中发出post请求的methot。我不知道为什么,但是当从配置中删除拦截器时,我的登录没有问题。请帮帮忙。
SessionInterceptor.class
public class SessionInterceptor extends HandlerInterceptorAdapter {
@Autowired
private SessionManager sm;
@Autowired
private MessageSourceAccessor msa;
@SuppressWarnings("deprecation")
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String return_url = request.getRequestURL().toString() + "?" + request.getQueryString();
return_url = return_url.replace(msa.getMessage("config.baseurl"), "");
if (!request.getRequestURI().contains("login")) {
if (sm.get(request) == null) {
response.sendRedirect(
msa.getMessage("config.baseurl") + "/login?return=" + URLEncoder.encode(return_url));
return false;
}
}
return true;
}
}SessionManager.class
@Component
public class SessionManager {
public static final String ProfileUser = "profileuser";
public UserModel get(HttpServletRequest request) {
HttpSession session = null;
session = request.getSession(false);
if (session == null)
return null;
return (UserModel) session.getAttribute(ProfileUser);
}
public void set(HttpServletRequest request, UserModel auth) {
HttpSession session = null;
session = request.getSession(false);
if (session == null)
return;
session.setAttribute(ProfileUser, auth);
}
public void remember(HttpServletRequest request) {
HttpSession session = null;
session = request.getSession(false);
if (session != null)
session.invalidate();
session.setMaxInactiveInterval(60 * 60 * 60);
}
public void init(HttpServletRequest request, UserModel auth, Boolean remember) {
HttpSession session = null;
session = request.getSession(false);
if (session != null)
session.invalidate();
session = request.getSession(true);
if (remember)
session.setMaxInactiveInterval(60 * 60 * 60 * 60);
else
session.setMaxInactiveInterval(1800);
session.setAttribute(ProfileUser, auth);
}
public void destroy(HttpServletRequest request) {
HttpSession session = null;
session = request.getSession(false);
if (session == null)
return;
session.removeAttribute(ProfileUser);
session.invalidate();
}发布于 2017-01-23 13:50:42
你能提供你的全部配置吗?从你的代码中可以胡乱猜测:
if (!request.getRequestURI().contains("login")) {
if (sm.get(request) == null) {
response.sendRedirect(
msa.getMessage("config.baseurl") + "/login?return=" + URLEncoder.encode(return_url));
return false;
}
}现在,如果您的sm.get(request) == null,那么重定向将发生,因此调用将不会去控制器。
重定向意味着呼叫再次转到客户端,从客户端将向所述url发起新的呼叫。
或
如果您的@Autowire在这种情况下不工作,sm将为空。而sm.get(request) == null会抛出NullPointerException。再一次,调用不会转到控制器。
但可以肯定的是,提供您的配置。或者在拦截器中调试你的代码。
https://stackoverflow.com/questions/41798298
复制相似问题