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

tech2022-08-03  146

导语

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

实现

首先定义我们的拦截器,这里需要实现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,如果其中有用户名这个属性且不为空,我们就认为用户已经登录了;如果用户未登录,将请求转发至登录页,并提示用户登录。

在登录接口中将用户名写入到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"; } } 将我们实现的登录拦截器注册到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/**等)外的所有请求。


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

最新回复(0)