2017-06-24 1 views
-1

私はSpringブートとfreemarkerを使用してWebアプリケーションを作成し、インターセプタ(HandlerInterceptorAdapter)を実装しました。Springブートインターセプタを使用してリダイレクト

インターセプタの内部で、ユーザーがログに記録されていない場合、ログインページにリダイレクトされます。これは正常に動作します。しかし問題は、コントローラがログインページにリダイレクトされる前に最初に実行されていることです。

私のインターセプタコード:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { 
     User userSession = (User) request.getSession().getAttribute("user"); 
     if (userSession == null) { 
      response.sendRedirect("/login"); 
     } 
    } 

コントローラクラス(response.sendRedirect後、このコントローラはまだexcutedされています)。どうして?私はこの問題を積み重ねている。

@RequestMapping("/home") 
    public String home(Model model, HttpServletRequest httpServletRequest) { 

     String returnPage = "home-admin"; 

     User user = (User) httpServletRequest.getSession().getAttribute("user"); 
     if(user != null){ 
      String accessType = accessTypeRepository.getAccessType(user.getAccessId()); 
      if(StrUtil.isEqual(accessType, AccessTypeConst.MANAGER.getType())){ 
       returnPage = "home-manager"; 
      } 
     } 
     return returnPage; 
    } 

答えて

6

実行を完了した場合は、インターセプタからreturn falseを入力する必要があります。

戻り値: 実行チェーンが次のインターセプタまたはハンドラ自体を処理する必要がある場合はtrue。それ以外の場合、DispatcherServletはこのインターセプタがすでにレスポンス自体を処理しているとみなします。

http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/HandlerInterceptor.html

if (userSession == null) { 
    response.sendRedirect("/login"); 
    return false; 
} 
+0

Woahhに変更

if (userSession == null) { response.sendRedirect("/login"); } 

!!私はこの問題を数時間スタックしており、解決策はこれほど簡単です。ありがとう、たくさんの男、あなたは私の一日を作った。 – kevenlolo

+0

私はあなたの問題を解決してうれしいです。あなたは答えとしてこれを受け入れるでしょうか? –

関連する問題