Session应用 判断用户是否登陆

在访问页面的时候用户要先登陆才能访问其他页面,这一点就可以通过session对象来判断此用户是否是合法用户实现

1. 需求

只有登陆的用户才能发送/admin/*的请求,未登录的都不能访问并跳转到登录页

2. 实现

2.1 登陆方法控制器

@PostMapping("/admin/login")
    public String login(@RequestParam String username,
                        @RequestParam String password,
                        HttpSession session,
                        RedirectAttributes redirectAttributes){
        System.out.println(username);
        System.out.println(password);
        User user = userService.checkUser(username, password);
        if(user!=null){
            user.setPassword(null);
            session.setAttribute("user",user);
            System.out.println("true");
            return "adminindex";
        }else {
            redirectAttributes.addFlashAttribute("message","用户名或密码错误");
            return "redirect:/admin";
        }
    }

可以看到,如果用户登陆,会把用户信息存到Session域中

2.2 实现拦截器

拦截路径为/admin/*的请求,并判断域对象中是否有用户登陆的信息,有则放行,否则跳转到登录页

public class LoginInterceptor extends HandlerInterceptorAdapter {
    //拦截器 不登陆不可以访问/admin/下的url

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        if(request.getSession().getAttribute("use") == null){
            response.sendRedirect("/admin");
            return false;
        }
        return true;
    }
}

2.3 配置拦截器

配置拦截器,拦截器拦截/admin/**的所有请求,但是会放行/admin/login(为了发送登陆请求)

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/admin/**")
                .excludePathPatterns("/admin")
                .excludePathPatterns("/admin/login");

    }
}

发布了76 篇原创文章 · 获赞 0 · 访问量 2011

猜你喜欢

转载自blog.csdn.net/weixin_43907800/article/details/104115858