SpringBoot 之 实现登录功能及登录拦截器
2020-05-05 10:41 小伍2013 阅读(9206) 评论(0) 编辑 收藏 举报增加登录退出控制器:
# src/main/java/com/wu/controller/LoginController.java
@Controller
public class LoginController {
@RequestMapping("/user/login")
public String login(
@RequestParam("username") String username,
@RequestParam("password") String password,
Model model,
HttpSession session) {
if (!StringUtils.isEmpty(username) && "123456".equals(password)) {
session.setAttribute("loginUser", username);
return "redirect:/main.html";
} else {
model.addAttribute("msg", "用户名或密码错误!");
return "index";
}
}
@RequestMapping("/user/logout")
public String logout(HttpSession session) {
session.invalidate();
return "redirect:/index.html";
}
}
增加登录拦截器:
# src/main/java/com/wu/interceptor/LoginHandlerInterceptor .java
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object user = request.getSession().getAttribute("loginUser");
if (user == null) {
request.setAttribute("msg", "无权限请先登录");
request.getRequestDispatcher("/index.html").forward(request, response);
return false;
} else {
return true;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
将登录拦截器配置到容器中:
# src/main/java/com/wu/config/MyMvcConfig.java
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
// 将登录拦截器配置到容器中
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/", "/index.html", "/user/login", "/css/**", "/js/**", "/img/**");
}
// 配置视图跳转
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
registry.addViewController("/index.html").setViewName("index");
registry.addViewController("/main.html").setViewName("dashboard");
}
// 将本地化解析器配置到容器中
@Bean
public LocaleResolver localeResolver() {
return new MyLocaleResolver();
}
// 将视图解析器配置到容器中
@Bean
public ViewResolver myViewResolver() {
return new MyViewResolver();
}
// 自定义一个视图解析器
public static class MyViewResolver implements ViewResolver {
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
return null;
}
}
}