软件编程
位置:首页>> 软件编程>> java编程>> 零基础入门SpringMVC * 的配置与使用

零基础入门SpringMVC * 的配置与使用

作者:羡羡ˇ  发布时间:2023-07-17 21:59:28 

标签:SpringMVC, , ,原理

 在SpringMVC中 我们说到了 * , 它会在映射处理器(HandleMapping)执行时检查我们
访问的地址是否配置 * , 在 * 中实现一些功能

零基础入门SpringMVC * 的配置与使用

       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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com