在做项目的过程中,我们通常会遇到用户输入登录账号名和密码如果输入不正确,该如何拦截用户进入主界面的问题,这种问题可以在SpringBoot中配置登录拦截器进行实现。
首先需要在控制层中新建LoginController类
LoginController
类需要配置@Controller
注解,表示控制类,@RequestMapping
表示响应体,@RequestParam
表示请求参数,而在类下利用if else语句进行逻辑判断,我这里设置如果用户名不为空,密码是123456就可以放行
@Controller
public class LoginController {
@RequestMapping("/user/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
/*Model用来回显参数*/
Model model,
HttpSession session){
// 接下来具体的业务就是判断用户名密码是否正确
// 这里的条件是如果用户名不为空密码是123456就可以进去
if (!StringUtils.isEmpty(username) && "123456".equals(password)){
session.setAttribute("loginUser", username);
// 重定向
return "redirect:/main.html";
} else {
model.addAttribute("msg", "用户名或密码错误");
return "index";
}
}
}
在config包中新建类配置链接映射
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
registry.addViewController("/index.html").setViewName("index");
registry.addViewController("/main.html").setViewName("dashboard");
}
这样/main.html
就会自动跳转到dashboard.html
页面
配置登录拦截器,在config包下新建LoginHandlerInterceptor类实现登录拦截器
// 实现登录拦截器,没有用户名密码坚决不给进入main页面
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 登录成功之后要有用户session
Object loginUser = request.getSession().getAttribute("loginUser");
if (loginUser == null) { // 用户没有登录
System.out.println("没有获取到loginUser");
request.setAttribute("msg", "没有权限, 请先登录");
request.getRequestDispatcher("/index.html").forward(request,response);
return false; // 不放行
} else {
return true;
}
}
}
在MVCConfig类中配置拦截器
// 配置拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor())
./*添加拦截*/addPathPatterns("/**")
./*某些请求不拦截*/excludePathPatterns("/index.html","/","/user/login","/css/*","/js/**","/img/**");
}
实现效果: