簡體   English   中英

彈簧攔截器不起作用JAVA

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM