我是如何跳槽到梦想中的互联网公司,springboot简易拦截器

第二个参数用于重定向。


response.sendRedirect("/user/error"); 

执行这条语句将意味着直接跳转到这个指定的url。

完成后的代码:


@Configuration

public class MyInterceptor implements HandlerInterceptor {

    @Autowired

    IndexService indexService;



    @Override

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



        String[] tokens=request.getParameterValues("token");



        if (tokens==null) {

            response.sendRedirect("/user/error");

            return false;

        }



        String token=tokens[0];

        if (indexService.findByToken(token)==false){

            response.sendRedirect("/user/error");

            return false;

        }



        if (indexService.findExpiredTimeByToken(token).before(new Date())){

            response.sendRedirect("/user/error");

            return false;

        }



        return true;



    }

} 

[](

)2. 将MyInterceptor类在自己的配置类MyMvcConfig中进行注册。


@Configuration

public class MyMvcConfig implements WebMvcConfigurer {

    @Autowired

    MyInterceptor myInterceptor;



    @Override

    public void addInterceptors(InterceptorRegistry registry) {

        List<String> excludePaths=new ArrayList<>();

        excludePaths.add("/user/login/**");

        excludePaths.add("/user/error");

        registry.addInterceptor(myInterceptor).addPathPatterns("/user/**").excludePathPatterns(excludePaths);

        //参数可以是单个路径的字符串,也可以是多个路径的list

    }

} 

[](

)3.Controller

在登陆的逻辑中,只需要添加token的生成、token以及过期时间的存储即可。返回当然要返回生成的token。


@RestController

@RequestMapping("/user")

public class IndexController {

    @Autowired

    IndexService indexService;



    @GetMapping("/login/{user}")

    public String login(@PathVariable int user){

        return indexService.login(user);

    }



    @GetMapping("/service")

    public String service(){

        return "token right";

    }



    @GetMapping("/error")

    public String error(){

        return "error";

    }

} 

[](

)4.Service


@Service

public class IndexService {



    Map<String,Integer> map= new HashMap<>();

    Map<String, Date> map2=new HashMap<>();



    public Boolean findByToken(String token){

      if (map.get(token)==null) return false;else return true;

    }



    public Date findExpiredTimeByToken(String token){

       return map2.get(token);

    }



    public String login(Integer user){

        String token= UUID.randomUUID().toString();

        map.put(token,user);

        map2.put(token,new Date(System.currentTimeMillis()+60*1000));

        return token;

    }



} 

这里用两个map模拟了数据库,当登陆成功的时候,map将自动生成token,并存储token、过期时间、用户id。过期时间暂定为1分钟。

测试

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值