SpringBoot——拦截器
更多内容,前往 IT-BLOG
一、登录时可能会出现重复提交问题。我们可以通过重定向解决此问题。例如:用户提交的请求为:/user/login,通过 redirect:重定向至 main.html请求。
1 @PostMapping("/user/login")
2 public String login(@RequestParam("username") String name,
3 @RequestParam("password") String password,
4 Map<String,String> map,
5 HttpSession session){
6 if(!StringUtils.isEmpty(name) && password.equals("123456")){
7 //将用户名设置到session中
8 session.setAttribute("loginUser",name);
9 return "redirect:/main.html";
10 }else{
11 map.put("msg","密码或用户名错误");
12 return "index";
13 }
14 }
二、配置视图映射,新建配置类通过继承 WebMvcConfigurerAdapter类,实现 addViewControllers方法,添加视图映射。WebMvcConfigurerAdapter
该抽象类其实里面没有任何的方法实现,只是空实现了接口WebMvcConfigurer
内的全部方法,并没有给出任何的业务逻辑处理,这一点设计恰到好处的让我们不必去实现那些我们不用的方法,都交由WebMvcConfigurerAdapter
抽象类空实现,如果我们需要针对具体的某一个方法做出逻辑处理,仅仅需要在WebMvcConfigurerAdapter
子类中@Override
对应方法就可以了。
1 @Configuration
2 public class MyMvcConfig extends WebMvcConfigurerAdapter {
3 @Override
4 public void addViewControllers(ViewControllerRegistry registry) {
5 registry.addViewController("/").setViewName("index");
6 registry.addViewController("/index.html").setViewName("index");
7 registry.addViewController("/main.html").setViewName("dashboard");
8 }
9 }
三、添加自己配置的拦截器:因为当我们访问:/main.html请求的时候,也可以跳转至dashboard.html页面,需要实现HandlerInterceptor接口。通过preHandle判断是否登录成功。preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
1 public class LoginHandlerInterceptor implements HandlerInterceptor{
2 @Override
3 public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
4 Object user = httpServletRequest.getSession().getAttribute("loginUser");
5 if(user == null){
6 httpServletRequest.setAttribute("msg","没有权限请先登录");
7 httpServletRequest.getRequestDispatcher("/index.html").forward(httpServletRequest,httpServletResponse);
8 return false;
9 }else{
10 //已登录,放行。
11 return true;
12 }
13 }
14
15 ////postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返 回ModelAndView,但未进行页面渲染),有机会修改ModelAndView (这个博主就基本不怎么用了);
16 @Override
17 public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
18
19 }
20
21 //afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);
22 @Override
23 public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
24
25 }
26 }
四、需要将自己定义的拦截器注册到IOC容器中,进入我们自定义的配置类MyMvcConfig。需要注意的是登录请求/user/login不要忘记排除掉。
1 @Configuration
2 public class MyMvcConfig extends WebMvcConfigurerAdapter {
3
4 @Override
5 public void addInterceptors(InterceptorRegistry registry) {
6 //super.addInterceptors(registry);
7 //SpringBoot已经做好了静态资源映射
8 registry.addInterceptor(new LoginHandlerInterceptor()).
9 addPathPatterns("/**").excludePathPatterns("/index.html","/","/user/login");
10 }
11 }
----关注公众号,获取更多内容----
SpringBoot——拦截器的更多相关文章
- Java结合SpringBoot拦截器实现简单的登录认证模块
Java结合SpringBoot拦截器实现简单的登录认证模块 之前在做项目时需要实现一个简单的登录认证的功能,就寻思着使用Spring Boot的拦截器来实现,在此记录一下我的整个实现过程,源码见文章 ...
- SpringBoot拦截器中Bean无法注入(转)
问题 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Be ...
- 【SpringBoot】SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener
=================6.SpringBoot拦截器实战和 Servlet3.0自定义Filter.Listener ============ 1.深入SpringBoot2.x过滤器Fi ...
- SpringBoot拦截器中无法注入bean的解决方法
SpringBoot拦截器中无法注入bean的解决方法 在使用springboot的拦截器时,有时候希望在拦截器中注入bean方便使用 但是如果直接注入会发现无法注入而报空指针异常 解决方法: 在注册 ...
- Springboot拦截器未起作用
之前遇到要使用springboot拦截器却始终未生效的状况,查了网上的博客,大抵都是@Component,@Configuration注解未加,或是使用@ComponentScan增加包扫描,但是尝试 ...
- SpringBoot拦截器中service或者redis注入为空的问题
原文:https://my.oschina.net/u/1790105/blog/1490098 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于 ...
- springboot + 拦截器 + 注解 实现自定义权限验证
springboot + 拦截器 + 注解 实现自定义权限验证最近用到一种前端模板技术:jtwig,在权限控制上没有用springSecurity.因此用拦截器和注解结合实现了权限控制. 1.1 定义 ...
- Springboot 拦截器配置(登录拦截)
Springboot 拦截器配置(登录拦截) 注意这里环境为springboot为2.1版本 1.编写拦截器实现类,实现接口 HandlerInterceptor, 重写里面需要的三个比较常用的方 ...
- Springboot拦截器实现IP黑名单
Springboot拦截器实现IP黑名单 一·业务场景和需要实现的功能 以redis作为IP存储地址实现. 业务场景:针对秒杀活动或者常规电商业务场景等,防止恶意脚本不停的刷接口. 实现功能:写一个拦 ...
- SpringBoot 拦截器获取http请求参数
SpringBoot 拦截器获取http请求参数-- 所有骚操作基础 目录 SpringBoot 拦截器获取http请求参数-- 所有骚操作基础 获取http请求参数是一种刚需 定义拦截器获取请求 为 ...
随机推荐
- 高级纹理以及复杂而真实的应用——ShaderCp10
--20.9.7 这章主要分成三个部分 立方体纹理(cubemap) 渲染纹理(RenderTexture,rt) 和程序纹理 一.立方体纹理 立方体纹理顾名思义是一种三维的纹理形状类似于立方体,由六 ...
- 为动态二级域名申请https的免费证书.
前面已经讲过将nginx部署,并注册了免费的二级域名.但将网址发给儿子,儿子说微信已经不能打开http的网址了,所以一想还是研究一下https的证书申请. 网上有很多讲通过,acme的脚本来自动化申请 ...
- MD5加密汇总
1 #region MD5 2 /// <summary> 3 /// 16位MD5加密 4 /// </summary> 5 /// <param name=" ...
- BGP反射器
路由反射器是一种减少自治系统内IBGP对等体连接数量的方法. 根据BGP路由通告原则,要求一个AS内的所有BGP Speaker将建立全连接关系(BGP Speaker两两建立邻接关系).当AS内的B ...
- WebApi 下载三维zip文件并预览
// 异步加载 const LoadObj = async (key?: string) => { LoadState.value = true var objStr, mtlStr var i ...
- 学生管理系统CLI版
学生管理系统CLI版 学生类 package com.itheima_03; public class Student { String sid; String name; String age; S ...
- 洛谷P1118数字三角形,
#include <bits/stdc++.h> using namespace std; int c[13][13];//杨辉三角 int b[13];//用于排除 int a[13]; ...
- 异常:Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.3.2.RELEASE:repackage (repackage) 解决办法
异常:Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.3.2.RELEASE:repackage ...
- 8.forEach的使用
1 List<customer> list //一个类是customer的列表 2 3 /* for(int i = 0;i < list.size();i++){ 4 System ...
- 视频播放-videojs
视频播放-video-js组件 安装 yarn add video.js --save npm install video.js --save 代码 import React, { useEffect ...