初识SpringBoot——登录拦截器的实现

导语

在Spring应用中,某些资源必须要登录后才能查看,这时候我们就需要定义一个登录拦截器,将未登录的用户请求拦截至☞登录页。

实现

  1. 首先定义我们的拦截器,这里需要实现HandlerInterceptor接口:
public class LoginHandlerInterceptor implements HandlerInterceptor {

    /**
     * 登录拦截器
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object username = request.getSession().getAttribute("username");
        if (username != null) {
            return true;
        } else {
            request.setAttribute("login_error", "请先登录");
            request.getRequestDispatcher("/").forward(request, response);
            return false;
        }
    }
}

这里我们简单的从登录请求中获取session,如果其中有用户名这个属性且不为空,我们就认为用户已经登录了;如果用户未登录,将请求转发至登录页,并提示用户登录。

  1. 在登录接口中将用户名写入到session:
    @RequestMapping("/user/login")
    public String login(String username, @RequestParam("password") String passwd, ModelMap modelMap, HttpSession session) {
        if (!StringUtils.isEmpty((username)) && !StringUtils.isEmpty(passwd) && "admin".equals(username) && "admin".equals(passwd)) {
            // 将登录信息写入session
            session.setAttribute("username", username);
            return "redirect:/user/list";
        } else {
            modelMap.addAttribute("login_error", "用户名密码错误");
            return "login";
        }
    }
  1. 将我们实现的登录拦截器注册到Spring容器
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    /**
     * 注册登录拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
                .excludePathPatterns("/", "/user/login", "/css/**", "/js/**", "/img/**");
    }
}

这里我们拦截了除首页(/)、登录请求(/user/login)以及相关静态资源(/css/**等)外的所有请求。


至此,我们就简单做了一个登录拦截器。

猜你喜欢

转载自blog.csdn.net/chenshufeng115/article/details/108371041