Je peux penser à plusieurs façons d'obtenir ce que vous voulez.
Tout d'abord, vous pouvez utiliser le taglib de Spring Security pour rendre conditionnellement le contenu de votre modèle de vue selon que l'utilisateur est correctement authentifié ou non. Plus d'informations sur le taglib Spring Security sont aquí . Grossièrement, votre modèle de vue ressemblerait à quelque chose comme ça :
if(user is authenticated)
render content for authenticated user
else
render log-in form
Cela semble toutefois un peu brutal, car votre contrôleur créerait toujours le modèle, que l'utilisateur soit correctement authentifié ou non. Vous auriez également besoin de cette logique dans vos modèles de vue chaque fois que vous voudriez afficher un formulaire de connexion.
Une approche distincte consisterait à créer un HandlerInterceptor qui transmet toutes les demandes au contrôleur chargé de rendre la page de connexion, jusqu'à ce que l'utilisateur se soit pleinement authentifié. Pour ce faire, vous pouvez utiliser la méthode preHandle() de votre HandlerInterceptor :
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class MyHandlerInterceptor implements HandlerInterceptor
{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{
SecurityContext sc = SecurityContextHolder.getContext();
boolean userAuthenticated = true;
/* Some logic in here to determine if the user is correctly authenticated */
if(!userAuthenticated)
{
request.getRequestDispatcher("/login").forward(request, response);
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception
{
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception
{
}}
Vous pouvez ensuite configurer Spring MVC de manière à mapper l'implémentation de votre HandlerInterceptor sur les URL pour lesquelles vous avez besoin de cette fonctionnalité. Cela vous évite d'avoir à dupliquer la logique dans tous les contrôleurs et est facilement testable.