2017-01-23 21 views
0

私はこれらの2つのクラスを私のプロジェクトに持っています。私が設定でそれらを使用すると、私はプロジェクトのログインフォームを提出することはできません。私は私の資格情報を記入し、ログインをクリックした後、私はアプリケーションをデバッグしようとし、フォームが投稿要求をするメトトに当たらないことを認識します。なぜ私は考えていないのですが、設定からインターセプタを削除するとログインに問題はありません。助けてください。Springインターセプタは動作しません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(); 
    } 
+0

インターセプタで何を達成しようとしていますか? – iamiddy

+0

私はそのようにすることにしました。他の選択肢は何ですか? – cool

+0

なぜインターセプタが必要ですか? – iamiddy

答えて

0

uはあなたの全体構成を提供することができます。あなたのコードから野生の推測として:今

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に再度呼び出されることを意味します。

OR

あなた@Autowireが、その場合には動作しない場合smはnullになります。 sm.get(request) == nullNullPointerExceptionをスローします。再びコールはコントローラに送られません。

確かに、あなたの設定を提供してください。または、インターセプタでコードをデバッグします。

関連する問題