零基础入门SpringMVC * 的配置与使用
作者:羡羡ˇ 发布时间:2023-07-17 21:59:28
在SpringMVC中 我们说到了 * , 它会在映射处理器(HandleMapping)执行时检查我们
访问的地址是否配置 * , 在 * 中实现一些功能
SpringMVC 定义了 * 接口 HandlerInterceptor该接口中定义了三个方法,这三个方法的调用时在 SpringMVC 框架内部完成的, 调用这个三个方法的时候,其参数的值也是从框架内部传递进来的。
首先我们来看第一个方法 : boolean preHandle()
预处理方法,实现处理器(Controller层, 控制器)方法的预处理,就是在处理器方法执行之前这个方法会被行,相当于拦截了处理器方法,框架会传递请求和响应对象给该方法,第三个参数为被拦截的处理器方法。如果 preHandle 方法返回 true 表示继续流程(如调用下一个 * 或处理器方法),返回 false 表示流程中断,不会继续调用其他的 * 或处理器方法,此时我们需要通过 response 来产生响应;
意思就是说呢 , 当请求到达我们控制层方法时, 会先进入这个方法中, 根据preHandle() 方法的
返回结果(true 和 false) 来决定下一步如何执行
后两个方法 : void postHandle()
afterCompletion()
首先第一个方法是控制层方法执行后会执行, 第二个方法时整个请求结束后执行, 因为版本原因, 这两个方法的使用频率较低, 所以这里我们做一个了解即可
接着我们去搭建一个 * 看看到底是怎么一回事
//自己编写一个类PreInterceptor 实现 HandlerInterceptor接口 , 重写preHandle方法
public class PreInterceptor implements HandlerInterceptor {
//此方法返回true ,请求才能顺利到达相应的处理方法中,否则会被拦截
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//第三个参数为目标控制器对象
HttpSession session= request.getSession();
//判断信息是否有效
Admin admin = (Admin) session.getAttribute("admin");
if (admin==null){
response.getWriter().print(202);
return false;
}else {
return true;
}
}
}
接着需要去配置文件中配置 *
<!--配置 * -->
<mvc:interceptors>
<mvc:interceptor>
<!--所有请求都进入 * -->
<mvc:mapping path="/**"/>
<!--指定哪些请求不进入 * -->
<mvc:exclude-mapping path="/login/login"/>
<mvc:exclude-mapping path="/css/**"/>
<mvc:exclude-mapping path="/images/**"/>
<mvc:exclude-mapping path="/js/**"/>
<mvc:exclude-mapping path="/**.html"/>
<!-- * 实现类-->
<bean id="login" class="com.ff.ssm.util.PreInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
这里我们以后端登录 的控制器为例
@RestController
@RequestMapping(value = "/login")
public class LoginController {
@Autowired
LoginService loginService;
@PostMapping(value = "/login")
public CommonResult adminLogin(Admin admin, HttpSession session){
CommonResult commonResult;
try {
Admin admin1 = loginService.login(admin);
if(admin1==null){
commonResult=new CommonResult(201,"账号或密码错误",admin1);
}else {
session.setAttribute("admin",admin1);
commonResult=new CommonResult(200,"登录成功",admin1);
}
}catch (Exception e){
commonResult=new CommonResult(500,"登录失败","");
}
return commonResult;
}
}
如上, 前端发起了登录请求 , 我们配置了 * , 会先进入 * , 根据 preHandle() 方法决定
是否可以进入到我们具体的登录方法中
上述控制器例子是将用户的信息存入了session中 , 我们每次接受前端的请求时, 在 * 中判断用户的信息是否还是有效的 , 有效则放行, 无效则拦截 , 所以前提是我们的登录请求肯定是不能被拦截的, 因为这时候没有登录, 用户信息为 null ,所以上面我们配置了不拦截登录请求, 也不去拦截那些请求页面
来源:https://blog.csdn.net/xx12321q/article/details/124035713


猜你喜欢
- 这篇文章主要介绍了java多线程加锁以及Condition类的使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 做Android开发的程序员必须知道android客户端应该如何与服务端进行交互,这里主要介绍的是使用json数据进行交互。服务端从数据库查
- 1.非静态成员变量当成员变量为非静态成员变量且对当前类进行实例化时,将会产生死循环例子:public class ConstructorCl
- java 删除链表中的元素以下实例演示了使用 Clear() 方法来删除链表中的元素:import java.util.*;public c
- Spring Boot 的启动原理可以概括为以下几个步骤:加载 Spring Boot 应用程序的启动类根据启动类所在的包路径扫描相关的类根
- 1.map遍历快速实现边距,文字自适应改变大小Container( // padding: EdgeI
- 本文实例为大家分享了Unity3D实现相机跟随控制的具体代码,供大家参考,具体内容如下跟随算法要实现3D摄像机的控制第一步就是先实现摄像机跟
- 概述:App几乎都离不开与服务器的交互,本文主要讲解了flutter网络请求三种方式 flutter自带的HttpClient、 第三方库h
- 本文实例为大家分享了Android实现闪光灯效果的具体代码,供大家参考,具体内容如下一、声明闪光灯的权限<uses-permissio
- 一、简介   Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布
- Springboot自定义注解,支持SPEL表达式举例,自定义redis模糊删除注解1.自定义注解import java.lang.anno
- using System;using System.Collections;using System.Windows.Forms;names
- flex 布局算法Flutter 弹性布局的基石 是 flex 和 flexible。理解了这两个 widget,后面的row,column
- 解决办法:1.VCS--->Enable Version Control Integration2.选择要关联的版本工具补充:git
- 1.嵌套类如果一个类只对另外一个类有作用,那么可以将其嵌入到该类中,使两个类在一起。和Java中定义的内部类很像。class Compute
- 分类自定义Layout可以分为两种情况。自定义ViewGroup,创造出一些不同于LinearLayout,RelativeLayout等之
- 一、背景项目中要解析xml,由于Dom4j的诸多优点,我就用Dom4j解析xml,代码如下:public void readXML() {
- java 单例的五种实现方式及其性能分析序言在23种设计模式中,单例是最简单的设计模式,但是也是很常用的设计模式。从单例的五种实现方式中我们
- 注意:适用于springboot或者springcloud框架1.首先下载相关文件2.然后需要去启动相关的启动文件3、导入相关jar包(如果
- 使用DataGridView控件绑定数据后有时需要清空绑定的数据,在清除DataGridView绑定的数据时:1、设置DataSource为