添加登录拦截器【springboot mybatis学习与开发(四)】
来源:互联网 发布:网络教育能读本科嘛 编辑:程序博客网 时间:2024/05/22 14:20
在前面一篇博客完成了用户登录和注册功能,当然有很多细节问题没有处理,这一篇博客,我们加一个功能,添加一个拦截器。
1、功能说明
我们前端使用了ajax技术,即登录成功之后,会进去到显示所有用户的列表页面。但这个列表页面在我们的控制器中有直接的访问路径,即不用登录也可以访问,此时我们需要加个拦截器,用户必须先登录,才能访问其他页面,否则只会留在登录界面。
2、拦截器说明
Spring Boot并没有帮我们自动配置拦截器,这个不像ViewResolver有默认的。但这也无妨,我们在前面添加映射访问路径的时候,自定义的WebMvcConfi配置类中,继承了WebMvcConfiguerAdapter,我们可以实现抽象方法,来添加拦截器,效果和一开始添加视图控制器是一样的。
2.1、登录请求
@RequestMapping("/checkLogin") @ResponseBody public boolean loginUser(@RequestBody User user, Model model,HttpSession session) { boolean result = false; if (userService.checkLogin(user) != null) { session.setAttribute("user", user);//将用户信息存入session中 model.addAttribute("user", user); System.out.println("登录成功: "+user); result = true; } return result; }
登录成功之后,将用户信息存入到session中
2.2、拦截器类
首先写自定义的拦截器,实现HandlerInterceptor接口,或者继承HandlerInterceptorAdapter抽象类。
public class UserLoginInterceptor implements HandlerInterceptor { /** * 用来存储不拦截的路径 */ private static final String[] IGNORE_URI = {"/nothing"}; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("开始preHandle,判断请求是否需要拦截"); boolean flag = false; String servletPath = request.getServletPath(); System.out.println("请求路径是: "+servletPath); // 检测是否为需要拦截的请求 for (String s : IGNORE_URI) { if (servletPath.contains(s)) { System.out.println("该请求不需要拦截"); flag = true; } } // 需要拦截处理的请求 if (!flag) { // 获取存储在session域的用户 User user = (User) request.getSession().getAttribute("user"); if (user == null) { System.out.println("拦截请求:用户未登录,禁止直接访问,返回登录页面"); request.setAttribute("message", "请先登录"); // 服务器内部转发,可以带回request request.getRequestDispatcher("/login").forward(request, response); } else { System.out.println("拦截请求:用户已经登录,可以成功浏览网页"); flag = true; } } return flag; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("拦截请求之后"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("控制器处理完成之后"); }}
从session中获取到存入的用户信息。这里拦截器的perHandle方法在调用控制器之前完成,如果返回是true才会接着执行后面的请求,否则将会停止请求。这里使用了forward方法,那么如果用户没有登录,则跳转到登录页面,这样这个拦截器的生命周期就已经结束了。这里还有个细节,就是定义了一个String[]用来存放不需要拦截的路径。
2.3注册拦截器
在自定义配置类中WebMvcCofig中重写方法
@Configurationpublic class WebMvcConfig extends WebMvcConfigurerAdapter { //省略部分代码 @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new UserLoginInterceptor()).addPathPatterns("/user/**"); }}
3、测试拦截效果
3.1、拦截请求
3.1.1、浏览器显示
这里由于未登录直接访问了showAllUser页面,则返回到了登录页面
3.1.2、控制台显示
4、心得体会
这次添加了一个简单的登录拦截器,主要还是理清楚流程。关键就是把信息存入到session中,这样在浏览器关闭之前,用户信息都会一直存在。
addPathPatterns("/user/**")
这个方法是给拦截器设置需要拦截的请求,不要设置太多的拦截路径,会造成许多没必要的拦截。
- 添加登录拦截器【springboot mybatis学习与开发(四)】
- 实现登录和注册功能【springboot mybatis学习与开发(三)】
- springboot添加拦截器
- springboot添加拦截器
- 项目结构【springboot mybatis学习与开发(一)】
- user_demo结果展示【springboot mybatis学习与开发(七)】
- springboot(四、springboot+mybatis)
- WEB开发----springboot的登录拦截机制
- SpringBoot如何添加拦截器
- SpringBoot如何添加拦截器
- SpringBoot学习笔记(六):配置拦截器,控制登录跳转
- springboot学习笔记2(拦截器,redis,授权登录,读取yml配置文件)
- SpringBoot学习-(六)SpringBoot与Mybatis整合
- springboot(八)拦截器之验证登录
- 实现基本的MVC【springboot mybatis学习与开发(二)】
- 完成增删改查【springboot mybatis学习与开发(五)】
- Mybatis学习笔记四 查询数据与添加数据
- struts2学习笔记(四)拦截器与拦截器栈
- Android APP通用型拒绝服务漏洞分析
- JAVA类加载机制
- DB2删除数据库
- 记跟李院长谈话心得
- 纯CSS3 3D图片向上翻转渐隐消失动画DEMO演示
- 添加登录拦截器【springboot mybatis学习与开发(四)】
- sonarqube 汉化 An error has occurred. Please contact your administrator
- c++上机作业3
- Python ' ~ ' (取反) 操作符解释
- mysql日期 获取本月第一天 获取下个月的第一天
- 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容
- ubuntu 16.04下搜狗输入法不能输入中文解决
- [Linux笔记006]:shell中用命令启动eclipse及后台运行
- HDU