使用Interceptor拦截请求,做请求预处理(如根据用户token,预设值用户信息)

1、编写拦截器类(实现HandlerInterceptor,@Component注解)
2、注册拦截器类(@Configuration注解不能少)

拦截器类

package com.qifeng.authdemo.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Random;

/**
 * @author zengqifeng
 * @version 1.0
 * @date 2019/12/12 17:37
 * url拦截器,拦截每一个请求,做请求预处理,和鉴权
 * 编写完拦截器实现,注意注册拦截器(webmvc...)
 */
@Component
public class UrlInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //根据当前用户携带的token执行鉴权先关
        //鉴权是否通过返回true or false
        //鉴权通过在request中预设用户信息,例如预设userId,在Controller中使用@RequestAttribute获取
        request.setAttribute("userId", new Random().nextInt(10));
        request.setAttribute("userName", "二哈");
        request.setAttribute("password", "123");
        return true;
    }

    @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 {

    }
}

注册拦截器

package com.qifeng.authdemo.config;

import com.qifeng.authdemo.interceptor.UrlInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

/**
 * @author zengqifeng
 * @version 1.0
 * @date 2019/12/12 17:44
 */
@Configuration
public class RegistInterceptor extends WebMvcConfigurationSupport {

    @Autowired
    private UrlInterceptor urlInterceptor;

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        //可设置拦截路径和非拦截路径
        registry.addInterceptor(urlInterceptor).addPathPatterns("/**");
    }
}

controller方法中使用@RequestAttribute注解便可获得值

package com.qifeng.authdemo.controller;

import com.qifeng.authdemo.entity.Member;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author zengqifeng
 * @version 1.0
 * @date 2019/12/12 17:16
 */
@RestController
@RequestMapping("member")
public class MemberController {

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


    @GetMapping("getMemberInfo")
    public Member getMemberInfo(@RequestAttribute Integer userId) {
        logger.info("预设值的用户id={}", userId);
        Member member = new Member();
        member.setId(1);
        member.setUsername("铁蛋");
        member.setPassword("123456");
        return member;
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值