SpringBoot17 之Interceptor

实现自定义拦截器只需要3步:
1、创建我们自己的拦截器类并实现 HandlerInterceptor 接口。
2、创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法。
2、实例化我们自定义的拦截器,然后将对像手动添加到拦截器链中(在addInterceptors方法中添加)

public class MyInterceptor1 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println(“>>>MyInterceptor1>>>>>>>在请求处理之前进行调用(Controller方法调用之前)”);
return true;// 只有返回true才会继续向下执行,返回false取消当前请求
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {
    System.out.println(">>>MyInterceptor1>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
        throws Exception {
    System.out.println(">>>MyInterceptor1>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
}

}

public class MyInterceptor2 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println(“>>>MyInterceptor2>>>>>>>在请求处理之前进行调用(Controller方法调用之前)”);
return true;// 只有返回true才会继续向下执行,返回false取消当前请求
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {
    System.out.println(">>>MyInterceptor2>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
} 
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
        throws Exception {
    System.out.println(">>>MyInterceptor2>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
}

}

@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 多个拦截器组成一个拦截器链
// addPathPatterns 用于添加拦截规则
// excludePathPatterns 用户排除拦截
registry.addInterceptor(new MyInterceptor1()).addPathPatterns(“/**”);
registry.addInterceptor(new MyInterceptor2()).addPathPatterns(“/**”);
super.addInterceptors(registry);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot拥有强大的权限校验功能,可以使用Interceptor来实现权限校验。 Interceptor是Spring MVC中的一种拦截器,可以在请求进入Controller之前对请求进行拦截和处理。在权限校验方面,Interceptor可以用于拦截请求,并验证用户是否具有执行该请求的权限。 实现Interceptor的步骤如下: 1. 创建一个类,实现HandlerInterceptor接口,该接口定义了Interceptor的三个方法:preHandle、postHandle和afterCompletion。 2. 在preHandle方法中进行权限校验的逻辑处理,可以根据具体的业务需求,判断用户是否具有执行请求的权限。 3. 在Spring Boot的配置类中,通过实现WebMvcConfigurer接口,并重写addInterceptors方法,将Interceptor注册到Spring Boot中。 在Interceptor中进行权限校验的实例代码如下: ```java public class AuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 获取请求的URL路径 String requestUrl = request.getRequestURI(); // 判断请求路径是否需要进行权限校验 if (needAuth(requestUrl)) { // 进行权限校验的逻辑处理 if (hasPermission(request)) { return true; // 具有权限,放行请求 } else { // 没有权限,返回无权限错误 response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "You don't have permission to access this resource."); return false; } } else { return true; // 不需要进行权限校验的路径,直接放行请求 } } private boolean needAuth(String requestUrl) { // 判断请求路径是否需要进行权限校验 // 根据业务需求进行判断,返回true表示需要进行权限校验,返回false表示不需要进行权限校验 // 这里只是一个示例,具体判断逻辑需要根据实际需求来实现 return requestUrl.contains("/admin/") || requestUrl.contains("/user/"); } private boolean hasPermission(HttpServletRequest request) { // 判断用户是否具有执行请求的权限 // 根据具体业务需求进行判断,返回true表示用户具有权限,返回false表示用户没有权限 // 这里只是一个示例,具体判断逻辑需要根据实际需求来实现 String token = request.getHeader("Authorization"); // 验证token是否有效 // ... // 这里只是一个示例,具体验证逻辑需要根据实际需求来实现 return token != null && !token.isEmpty(); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 在请求完成后进行处理 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 在视图渲染之后进行处理 } } ``` 然后在Spring Boot的配置类中注册Interceptor: ```java @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Autowired private AuthInterceptor authInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(authInterceptor) .addPathPatterns("/**") .excludePathPatterns("/login"); // 排除登录接口,不进行权限校验 } } ``` 以上代码就实现了基于Interceptor的权限校验功能。需要进行权限校验的请求会被拦截,进行权限校验的逻辑处理,没有权限的请求会返回无权限错误。不需要进行权限校验的请求直接放行。当然,具体的权限校验逻辑需要根据实际业务需求来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值