[英]Spring Interceptor do not work JAVA
我的項目中有這兩節課。 當我在配置中使用它們時,我無法提交項目的登錄表單。 在我填寫完我的憑據並單擊登錄后,我嘗試調試該應用程序,並意識到該表單沒有命中要求發布請求的方法。 我不知道為什么,但是當從配置中刪除攔截器時,登錄沒有問題。 請幫忙。
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();
}
您能提供您的整個配置嗎? 從您的代碼瘋狂猜測:
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
為null。 和sm.get(request) == null
將拋出NullPointerException
。 再次調用將不會轉到控制器。
但是請確保提供您的配置。 或在攔截器中調試代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.