springboot拦截器

本文介绍了如何在SpringBoot中创建并配置拦截器来检查请求头中的appId,用于验证身份和防止非法访问。通过定义AppIdInterceptor类并实现HandlerInterceptor接口,拦截器会在请求处理前检查appId。如果appId缺失或与Redis中的值不匹配,将返回错误响应。配置拦截器时,需创建WebConfig类并实现WebMvcConfigurer接口,然后在addInterceptors方法中添加拦截器路径。
摘要由CSDN通过智能技术生成

简述sprinboot拦截器使用.

定义一个拦截器处理类

简单来说就是你将访问拦截下来要干什么

比如验证身份或者 登录状态,权限等

实在只想看一下拦截效果,不想实现其他功能就直接写一个控制台输出也行

示例:

public class AppIdInterceptor implements HandlerInterceptor {

    private final RedisTemplate<String, String> redisTemplate;

    private static final Logger logger = LoggerFactory.getLogger(CheckHumanService.class);

    public AppIdInterceptor(RedisTemplate<String, String> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

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

        String appIdHeader = request.getHeader("appId");
        if (appIdHeader == null) {
            MessageResponse<String> errorResponse = MessageResponse.error(400"Missing appId in headers.");
            sendResponse(response, 400, errorResponse);

            logger.error("Missing appId in headers.(请设置header appId = asdfghjkl43279087274)");
            return false;
        }

        String appIdFromRedis = redisTemplate.opsForValue().get("appId");
        if (!appIdHeader.equals(appIdFromRedis)) {
            MessageResponse<String> errorResponse = MessageResponse.error(513"非法访问!");
            sendResponse(response, 513, errorResponse);
            logger.error("appId错误(请设置header appId = asdfghjkl43279087274)");
            return false;
        }

        return true;
    }

    // Helper method to send the response
    private void sendResponse(HttpServletResponse response, int statusCode, MessageResponse<?> responseData) throws IOException {
        response.setStatus(statusCode);
        response.setContentType("application/json;charset=UTF-8");
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.writeValue(response.getWriter(), responseData);
    }

}

在这个简单的示例中定义了拦截处理的方法:(验证header中的appId是否符合我的预先设定)

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

这个也是代码核心

需要一个包含这些参数的方法,处理拦截目的

(HttpServletRequest request, HttpServletResponse response, Object handler)

配置拦截器

接着刚刚的拦截器进行配置:

示例:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    private final RedisTemplate<String, String> redisTemplate;

    public WebConfig(RedisTemplate<String, String> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    @Autowired
    public AppIdInterceptor getAppIdInterceptor(){
        return new AppIdInterceptor(redisTemplate);
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册拦截器
        registry.addInterceptor(this.getAppIdInterceptor()).addPathPatterns("/**");
    }
}

代码核心是你需要定义一个WebConfig类(必须使用@Configuration注解)实现WebMvcConfigurer,再实现配置方法addInterceptors配置拦截器

registry.addInterceptor(这里需要一个你定义的拦截器的实体类).addPathPatterns("这里填写你想要拦截的路径");

其他都是为了添加实体类所定义的

到这里拦截器就配置好了

启动服务就可以查看拦截效果

本文由 mdnice 多平台发布

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值