在Spring Boot中如何检查会话是否存在于所有控制器中

时间:2019-03-29 15:26:27

标签: java spring spring-boot

我想检查所有请求中的会话,如果不存在特定会话,则将用户重定向到登录页面。

我在每次请求之前都使用@ControllerAdvice@ModelAttribute来检查会话,但是如果会话不存在,如何重定向用户?

@ControllerAdvice(basePackages = "ir.sadeghpro.magnet.controller")
public class Advice {

    @ModelAttribute
    public void checkSession(HttpSession session){
    if (session.getAttribute("user") == null){
        System.out.println("session is not exists");
        // how to redirect user
    }
}

第二种方法是使用HandlerInterceptor获取请求,然后再发送给控制器

@Component
public class CheckSessionInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
        HttpSession session = request.getSession();
        if (session == null || session.getAttribute("user") == null) {
            String url = request.getHeader("x-forwarded-proto") + "://" + request.getHeader("x-forwarded-host") + "/login";
            response.sendRedirect(url);
            return false;
        } else {
            return true;
        }
    }
} 

但是通过这种方式,静态资源(例如js或CSS或图片)将被重定向到/login网址

是否有任何方法可以检查会话或任何条件,并且如果对所有请求返回错误的重定向到某个页面,则不检查每个控制器中的内容?

0 个答案:

没有答案