2017-06-24 10 views
-1

Ich habe eine Web-Anwendung mit Spring-Boot und Freemarker und implementiert Interceptor (HandlerInterceptorAdapter) erstellt.Redirect mit Spring Boot Interceptor

Wenn der Benutzer im Interceptor nicht angemeldet ist, wird er zur Anmeldeseite umgeleitet. Das funktioniert gut. Das Problem ist jedoch, dass der Controller zuerst ausgeführt wird, bevor er auf die Anmeldeseite umgeleitet wird.

Mein Interceptor Code:

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

Controller-Klasse (nach response.sendRedirect, diese Steuerung noch excuted wird). Warum? Ich staple mit diesem Problem zusammen.

@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; 
    } 

Antwort

6

Sie sollten return false von Ihrem Interceptor, wenn Sie mit der Ausführung fertig sind.

Rückgabe: true, wenn die Ausführungskette mit dem nächsten Interzeptor oder dem Handler selbst fortgesetzt werden soll. Andernfalls geht DispatcherServlet davon aus, dass dieser Interceptor bereits die Antwort selbst bearbeitet hat.

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

ändern

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

zu

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

Woahh !! Ich habe mit diesem Problem für ein paar Stunden gestapelt und die Lösung ist genauso einfach. Vielen Dank, du hast mir den Tag versüßt. – kevenlolo

+0

Ich bin froh, dass es dein Problem löst. Würdest du das als Antwort akzeptieren? –