资讯专栏INFORMATION COLUMN

SpringBoot JWT Token 跨域 Preflight response is not

solocoder / 1429人阅读

摘要:一实现校验实现校验,可以通过或者,两种方式都可以,在最外层,请求首先会通过,允许请求才会通过。

一、Springboot实现token校验

SpringBoot实现token校验,可以通过Filter或者HandlerInterceptor,两种方式都可以,Filter在最外层,请求首先会通过Filter,filter允许请求才会通过Intercept。

下面以HandlerInterceptor实现为例

1.实现HandlerInterceptor,拦截请求校验token

public class AuthenticationInterceptor implements HandlerInterceptor {
    private static final String URI_PASS_TOKEN = "/user/login";

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws Exception {
        log.info("authentication interceptor preHandle  path:{} uri:{}",httpServletRequest.getServletPath(),httpServletRequest.getRequestURI());

//        if ("OPTIONS".equalsIgnoreCase(httpServletRequest.getMethod())) {
//            return true;
//        }

        if (httpServletRequest.getRequestURI().endsWith(URI_PASS_TOKEN)) {
            return true;
        }
        //从http header里面获取token
        String token = httpServletRequest.getHeader("token");
        if (StringUtils.isEmpty(token)) {
            throw new AuthenticationException(CODE_AUTHENTICATION_FAILED,"token is empty");
        }

        Algorithm algorithm = Algorithm.HMAC256(JwtConstant.TOKEN_CREATE_SECRET);
        JWTVerifier verifier = JWT.require(algorithm).build();
        try {
            verifier.verify(token);
        }catch (Exception ex){
            throw new AuthenticationException(CODE_AUTHENTICATION_FAILED,ex.getMessage());
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

2.Configuration配置,实现自动注入

@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authenticationInterceptor())
                .addPathPatterns("/**");
    }

    @Bean
    public AuthenticationInterceptor authenticationInterceptor() {
        return new AuthenticationInterceptor();
    }
}
二、前端调用 跨域 Preflight response is not successful

通过单元测试、PostMan测试都可以调同,但是vue前端怎么都无法调用,错误如下:

参考https://segmentfault.com/a/11...
发现是浏览器发出的OPTIONS预检请求被HandlerInterceptor拦截了,因此在HandlerInterceptor添加如下代码:

        if ("OPTIONS".equalsIgnoreCase(httpServletRequest.getMethod())) {
            return true;
        }

对于options的请求不进行token检测即可

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74120.html

相关文章

  • 使用Spring Security中遇到的Preflight请求和跨域的问题

    摘要:首先遇到的就是跨域问题,但是在携带请求过程中出现了服务端获取不到情况。浏览器将请求分成两类简单请求和非简单请求。而浏览器对这两种请求的处理是不一样的。 背景 在一个前后端分离开发的项目中,使用SpringSecurity做安全框架,用JWT来实现权限管理提升RESTful Api的安全性。首先遇到的就是跨域问题,但是在携带jwt请求过程中出现了服务端获取不到jwt情况。 跨域问题 在开...

    shengguo 评论0 收藏0
  • 使用Spring Security中遇到的Preflight请求和跨域的问题

    摘要:首先遇到的就是跨域问题,但是在携带请求过程中出现了服务端获取不到情况。浏览器将请求分成两类简单请求和非简单请求。而浏览器对这两种请求的处理是不一样的。 背景 在一个前后端分离开发的项目中,使用SpringSecurity做安全框架,用JWT来实现权限管理提升RESTful Api的安全性。首先遇到的就是跨域问题,但是在携带jwt请求过程中出现了服务端获取不到jwt情况。 跨域问题 在开...

    EscapedDog 评论0 收藏0
  • 跨域相关问题

    摘要:最近遇到了一个项目,第一次和其他组的后端合作,由于域名也是新申请的,所以在合作过程中遇到了很多跨域的问题。没有使用的,就是作为后端解决一下这个跨域解决代码登录失效问题一域名不一致的跨域提示现象解决办法设置。 最近遇到了一个项目,第一次和其他组的后端合作,由于域名也是新申请的,所以在合作过程中遇到了很多跨域的问题。现在自己做一下模拟总结。这里我的前端使用的vue,后端使用的express...

    Lycheeee 评论0 收藏0
  • 记录我开发工作中遇到HTTP跨域和OPTION请求的一个坑

    摘要:我通过这篇文章把今天工作中遇到的跨域和请求的一个坑记录下来。预检请求机制的使用,是为了避免跨域请求对服务器的用户数据产生未预期的影响。我使用了认证方式,这种方式不会造成该请求成为一个需要预检的请求,所以最后跨域成功了。 我通过这篇文章把今天工作中遇到的HTTP跨域和OPTION请求的一个坑记录下来。 场景是我需要在部署在域名a的Web应用里用JavaScript去消费一个部署在域名b的...

    HollisChuang 评论0 收藏0
  • 基于Shiro,JWT实现微信小程序登录完整例子

    摘要:小程序官方流程图如下,官方地址如果此图理解不清楚的地方也可参看我的博客本文是对接微信小程序自定义登录的一个完整例子实现,技术栈为。调用微信接口获取和根据和自定义登陆态返回自定义登陆态给小程序端。 小程序官方流程图如下,官方地址 : https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login....

    cfanr 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<