一.需求
对一些业务操作需要用户先做登入
二.实现案例
1)、自定义一个拦截器,来检查用户是否已经登入
/**@deprecated 登入检查
* @author hq.zheng
* @create 2019-03-06-上午 11:02
*/
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
Object loginUser = httpServletRequest.getSession().getAttribute("loginUser");
if(loginUser==null){
//未登入,返回到登入页
httpServletRequest.setAttribute("msg","没有权限请先登入!");
httpServletRequest.getRequestDispatcher("/index.html").forward(httpServletRequest,httpServletResponse);
return false;
}else{
//已登入
return true;
}
}
2)、自定义配置类,将自定义拦截器注册到容器中
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {
@Bean
public WebMvcConfigurerAdapter toIndex(){
WebMvcConfigurerAdapter adpter=new WebMvcConfigurerAdapter(){
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
registry.addViewController("/index.html").setViewName("index");
//重定向,解决重复登入
registry.addViewController("/main.html").setViewName("dashboard");
}
//注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//拦截所有请求除"/index.html","/","/user/login"之外
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/index.html","/","/user/login");
}
};
return adpter;
}
3)、后端处理代码
@PostMapping("/user/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
Map<String,Object> message,
HttpSession session){
if(!StringUtils.isEmpty(username)&&"123456".equals(password)){
//登入成功,防止表单重复提交,可以重定向到主页
session.setAttribute("loginUser",username);
return "redirect:/main.html";
}else{
//登入失败
message.put("msg","用户名密码错误!");
return "index";
}
4)、测试效果
如果不登入直接访问