ssm 新建拦截器_拦截器在springboot项目和ssm架构项目的应用

1.拦截器的主要功能

在访问某节点url前拦截客户端发来的请求,判断该请求是否符合自己定义的要求,如果不符合,返回false,该节点url的对应代码不会被执行;如果符合,返回true,可以执行该节点url。

2.在springboot项目中的应用方法

假设有这么一个场景:某电商网站的商品必须登陆后才能查看内容,否则无法进入商品页,那么处理方法就是使用拦截器,具体如下:

创建一个类,命名LoginIntercepter ,该类实现HandlerInterceptor接口,该类上加上@Component注解,加载进spring容器中

实现接口后,有三个方法需要我们处理,分别是preHandle,postHandle,afterCompletion;其中preHandle是访问controller接口之前执行的,在这里我们要写相关逻辑,判断登录状态;postHandle调用前提是preHandle返回true,它是在controller接口方法执行完毕和DispatcherServlet进行视图的渲染之前进行的;afterCompletion用于DispatcherServlet进行视图的渲染之后,多用于清理资源。这里主要用preHandle方法,代码如下:

//这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {

//每一个项目对于登陆的实现逻辑都有所区别,我这里使用最简单的Session提取User来验证登陆。

HttpSession session = request.getSession();

//这里的User是登陆时放入session的

String user = (String) session.getAttribute("username");

//如果session中没有user,表示没登陆

if (user ==null){

//这个方法返回false表示忽略当前请求,如果一个用户调用了需要登陆才能使用的接口,如果他没有登陆这里会直接忽略掉

//可以重定向到登录接口,让为登录的用户去先登录

response.sendRedirect("/luckmoney/nongyebank");

return false;

}else {

return true;//如果session里有user,表示该用户已经登陆,放行,用户即可继续调用自己需要的接口

}

}

至于postHandle和afterCompletion可以不写。

下面开始配置拦截器,代码如下:

@Configuration   //生命配置类,该类实现WebMvcConfigurer 接口

public class WebConfigurer implements WebMvcConfigurer {

@Autowired

private LoginIntercepter  loginIntercepter;  //注入自己写的拦截器

// 这个方法是用来配置静态资源的,比如html,js,css,等等

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

}

// 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效,addPathPatterns("/**")即是添加的拦截路径,也就是拦截controller的所有接口;.excludePathPatterns("/nongyebank","/login")即是放行的controller接口,这些接口不会被拦截,常用的登录接口和注册接口等不必拦截。

@Override

public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(loginIntercepter).addPathPatterns("/**").excludePathPatterns("/nongyebank","/login");

}

}

这样springboot的拦截器配置完成,这是一个登录的拦截器,目的是防止用户跨过登录直接访问其他内容。

2.在ssm架构项目中的应用方法

ssm架构项目就是spring,springmvc,mybaties的整合,这里的拦截器,主要是在xml中配置的,但是,自己也要定义一下拦截器

假设还是登录拦截的需求,自己写的拦截器和上一个springboot项目的一样,只是在配置上不一样了,springboot用的是注解形式来配置自己的拦截器,而ssm则是在xml中配置,这里是在spring-mvc.xml中配置拦截器:

配置如下

这里,放行的仍然是注册登录和js,img等静态资源,用标签将自己写的拦截器注入spring容器中,运行项目,可以发现只有放行的接口可以访问,其他的需要在登录后才能访问。

这样,拦截器在springboot项目和ssm架构项目的应用就简单实现了。

另外:如果配置多个拦截器,preHandle方法会按照配置的顺序顺序执行,而postHandle和afterCompletion是逆序执行的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值