精华内容
下载资源
问答
  • header 中需携带 token 校验 // 导出 exportFile(){ var xhr = new XMLHttpRequest(); var url = this.baseUrl + '/cloudnotes/partyMembers/export?orgId=' + this.userInfo.orgId xhr.open('get', url, true); ...
    下载文件需要通过 a 标签实现
    header 中需携带 token 校验
    // 导出
    exportFile(){
         var xhr = new XMLHttpRequest();
         var url = this.baseUrl + '/cloudnotes/partyMembers/export?orgId=' + this.userInfo.orgId  //请求地址
         xhr.open('get', url, true);
         xhr.responseType = "blob"; // 返回类型blob
         xhr.setRequestHeader('token', localStorage.getItem('token')); // 携带token校验
         xhr.onload = function () {
             if (this.status === 200) {
                 var blob = this.response;
                 var reader = new FileReader();
                 reader.readAsDataURL(blob); // 转换为base64
                 reader.onload = function (e) {
                     var a = document.createElement("a"); // 创建一个a标签用于下载
                     a.download = "组织用户.xls"; //文件名
                     a.href = e.target.result;
                     $("body").append(a);
                     a.click();
                     $(a).remove();
                 };
             }
         }
         xhr.send(); // 发送ajax请求
       },
    
    不需要 token 验证 直接下载
    // 下载导入模板
    downloadModel(){
       	var a = document.createElement("a");
        a.href = this.baseUrl + '/cloudnotes/partyMembers/export?orgId=' + this.userInfo.orgId
        a.click()
    }
    
    展开全文
  • 拦截器实现token校验

    2021-06-21 11:18:06
    token校验 1、实现HandlerInterceptorAdapter接口 /** * token校验拦截器 * * @author LIUQI */ @Component public class RepeatSubmitInterceptor extends HandlerInterceptorAdapter { @Resource RedisUtil...

    token校验

    1、实现HandlerInterceptorAdapter接口

    /**
     * token校验拦截器
     *
     * @author LIUQI
     */
    @Component
    public class RepeatSubmitInterceptor extends HandlerInterceptorAdapter {
    
        @Resource
        RedisUtil redisUtil;
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
            boolean isLogin = false;
    
            //请求带上令牌,Authorization:Bearer token
            final String token = request.getHeader("token");
            //判断key是否为空,判断value的前部是不是Bearer开头
            if (StringUtils.isNotBlank(token)) {
    
                //校验缓存中的token是否存在
                Boolean Exist = verification(token);
                if (!Exist) {
                    response.setContentType("application/json;charset=UTF-8");
                    //设置编码格式
                    response.setCharacterEncoding("UTF-8");
                    response.setStatus(417);
                    response.getWriter().write("token失效,请重新获取");
    //                response.getWriter().write(JSON.toJSONString(ApiResponse.defaultSuccessResult(1001,"token失效,请重新获取")));
                    return isLogin;
                }
                isLogin = true;
                return isLogin;
            }
            if (!isLogin) {
                response.setContentType("application/json;charset=UTF-8");
                //设置编码格式
                response.setCharacterEncoding("UTF-8");
                response.setStatus(401);
                response.getWriter().write("未通过登录认证,请在权限申请页面申请权限");
            }
            return isLogin;
            /*//登录校验
            String authToken = request.getHeader("Authentication");
                if (StringUtils.isBlank(authToken)) {
                    //这里自定义的一个异常,与全局异常捕获配合
                    throw new AuthException("权限受限");
                    //return false;
                } else {
                    //查缓存
                    verification(authToken);
                }
                return true;*/
        }
    
        /**
         * token校验
         */
        public Boolean verification(String token) {
            boolean exist = redisUtil.exist(token);
            return exist;
        }
    }
    

    2、过滤请求路径

    /**
     * @author LIUQI
     */
    @Configuration
    public class InterceptorAdapterConfig implements WebMvcConfigurer {
        @Resource
        private RepeatSubmitInterceptor repeatSubmitInterceptor;
     
    
        @Override
        public void addInterceptors(InterceptorRegistry registry)
        {
            //注册自己的拦截器并设置拦截的请求路径
            registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**")
                    .excludePathPatterns("/**/doc.html")
                    .excludePathPatterns("/swagger-resources")
                    .excludePathPatterns("/applyPermission/add")
                    .excludePathPatterns("/sysCheckCode/smsCheckCode")
                    .excludePathPatterns("/applyPermission/queryByTelPhone")
                    .excludePathPatterns("/applyPermission/queryByTelPhone/*")
                    .excludePathPatterns("/sysCheckCode/verification")
                    .excludePathPatterns("/**/*.css")
                    .excludePathPatterns("/**/*.js");
    
    //        registry.addInterceptor(repeatSubmitInterceptor).excludePathPatterns("/app/applyPermission/add");
    //        registry.addInterceptor(repeatSubmitInterceptor).excludePathPatterns("/**");
        }
    }
    
    展开全文
  • 来源:blog.csdn.net/qq_33556185/article/details/1054202051.定义Token的注解,需要Token校验的接口,方法上加上此注解import...

    来源:blog.csdn.net/qq_33556185/article/details/105420205

    1.定义Token的注解,需要Token校验的接口,方法上加上此注解

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface Token {
        boolean validate() default true;
    }
    

    2.定义LoginUser注解,此注解加在参数上,用在需要从token里获取的用户信息的地方

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    @Target(ElementType.PARAMETER)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface LoginUser {
    }
    

    3.权限的校验拦截器

    mport com.example.demo.annotation.Token;
    import com.example.demo.entity.User;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Component;
    import org.springframework.web.method.HandlerMethod;
    import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    @Component
    @Slf4j
    public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
        public static final String USER_KEY = "USER_ID";
        public static final String USER_INFO = "USER_INFO";
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            Token annotation;
            if(handler instanceof HandlerMethod) {
                annotation = ((HandlerMethod) handler).getMethodAnnotation(Token.class);
            }else{
                return true;
            }
            //没有声明需要权限,或者声明不验证权限
            if(annotation == null || annotation.validate() == false){
                return true;
            }
            //从header中获取token
            String token = request.getHeader("token");
            if(token == null){
                log.info("缺少token,拒绝访问");
                return false;
            }
            //查询token信息
    //        User user = redisUtils.get(USER_INFO+token,User.class);
    //        if(user == null){
    //            log.info("token不正确,拒绝访问");
    //            return false;
    //        }
            //token校验通过,将用户信息放在request中,供需要用user信息的接口里从token取数据
            request.setAttribute(USER_KEY, "123456");
            User user=new User();
            user.setId(10000L);
            user.setUserName("2118724165@qq.com");
            user.setPhoneNumber("15702911111");
            user.setToken(token);
            request.setAttribute(USER_INFO, user);
            return true;
        }
    }
    

    4.写参数的解析器,将登陆用户对象注入到接口里

    import com.example.demo.annotation.LoginUser;
    import com.example.demo.entity.User;
    import com.example.demo.interceptor.AuthorizationInterceptor;
    import org.springframework.core.MethodParameter;
    import org.springframework.stereotype.Component;
    import org.springframework.web.bind.support.WebDataBinderFactory;
    import org.springframework.web.context.request.NativeWebRequest;
    import org.springframework.web.context.request.RequestAttributes;
    import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    import org.springframework.web.method.support.ModelAndViewContainer;
    @Component
    public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver
    {
        @Override
        public boolean supportsParameter(MethodParameter methodParameter) {
            return methodParameter.getParameterType().isAssignableFrom(User.class)&&methodParameter.hasParameterAnnotation(LoginUser.class);
        }
        @Override
        public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
            //获取登陆用户信息
            Object object = nativeWebRequest.getAttribute(AuthorizationInterceptor.USER_INFO, RequestAttributes.SCOPE_REQUEST);
            if(object == null){
                return null;
            }
            return (User)object;
        }
    }
    

    5.配置拦截器和参数解析器

    import com.example.demo.interceptor.AuthorizationInterceptor;
    import com.example.demo.resolver.LoginUserHandlerMethodArgumentResolver;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import java.util.List;
     
    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        @Autowired
        private AuthorizationInterceptor authorizationInterceptor;
        @Autowired
        private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver;
     
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(authorizationInterceptor).addPathPatterns("/api/**");
        }
     
        @Override
        public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
            argumentResolvers.add(loginUserHandlerMethodArgumentResolver);
        }
    }
    

    6.测试类

    import com.example.demo.annotation.LoginUser;
    import com.example.demo.annotation.Token;
    import com.example.demo.entity.User;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
     
    @RestController
    @RequestMapping(value = "/api")
    @Slf4j
    public class TestController {
        @RequestMapping(value="/test",method = RequestMethod.POST)
        @Token
        public String test(@LoginUser User user){
            System.out.println("需要token才可以访问,呵呵……");
            log.info("user:"+user.toString());
            return "test";
        }
        @RequestMapping(value="/noToken",method = RequestMethod.POST)
        public String noToken(){
            System.out.println("不用token就可以访问……");
            return "test";
        }
    }
    

    至此,自定义注解实现token校验就大功告成了。

    推荐好文
    
    强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!
    
    分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!
    能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮!
    
    
    
    
    展开全文
  • Retrofit2图片上传下载带token校验,博客地址:https://blog.csdn.net/dreams_deng/article/details/104823070
  • 使用HandlerInterceptor进行Token校验 @TokenCheck是自定义接口,目的是对该方法进行Token校验。 实现HandlerInterceptor接口中的preHandle方法,对调用方法前进行校验,当进入拦截器后,首先判断该目标方法是否有...

    Java使用HandlerInterceptor进行Token校验

    在这里插入图片描述
    @TokenCheck是自定义接口,目的是对该方法进行Token校验。
    在这里插入图片描述
    实现HandlerInterceptor接口中的preHandle方法,对调用方法前进行校验,当进入拦截器后,首先判断该目标方法是否有@TokenCheck注解,如果有的话从Request中的header取出token,检验该token是否在redis中存在,如果存在且未过期则放行该次请求,否则无权访问。

    展开全文
  • 一.普通token校验 待续
  • 全局token校验,代码如下 @Component public class TokenGlobalFilter implements GlobalFilter, Ordered { /** * 不进行token校验的请求地址 可配置在配置文件中 */ @Value("#{'${ignore.ignoreUrlList}'....
  • spring cloud gateway实现token校验

    千次阅读 2019-09-18 15:34:40
    对访问网关的请求进行token校验,只有当token校验通过时,才转发到后端服务,否则直接返回401 本文适用场景: token存放在redis中, key为用户的uid 开始 依赖的pom.xml <?xml version="1.0" encoding="UTF-8"?>...
  • 使用springBoot实现token校验 添加authorToken的依赖包 <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.8.2</version>...
  • 比如,我们可以在业务网关上做日志收集、Token校验等等,当然这么理解很狭隘,因为网关的能力远不止如此,但是不妨碍我们更好地理解它。下面的例子演示了,如何在网关校验Token,并提取用户信息放到Header中传给下游...
  • vue实现带token校验下载文件

    千次阅读 2020-09-10 16:39:12
    经过一番折腾实现了Vue带token校验下载文件流的功能。 不带token的下载方法: 不带token下载文件,实现特别简单直接使用<a> 标签,标签的href属性填写后台接口或服务器上文件地址即可。 <a:href=...
  • 依赖Spring Aop进行token校验。支持token的持久化保存,目前仅支持mysql数据库。支持token的可视化构建和管理。token构建,token list页面使用bootstrap和jquery-confirm进行设计。实现了第三方系统调用时的token...
  • 文件下载,添加token校验

    千次阅读 2019-03-26 10:28:28
    文件下载,token校验 文件下载通常使用a标签进行处理,本次介绍的是通过blob来实现流文件下载,原因是后台网关校验通过请求头拿token,原来的操作无法实现。在度娘搜索了半个小时候找到了靠谱方案,现在来摘抄一下;...
  • springCloud gateway+jwt方式做token校验

    万次阅读 热门讨论 2019-08-17 16:25:17
    项目中需要做接口的token校验,项目api是作为eureka-client去调用服务的,所有的以api开头请求过来都需要进行校验是否有token并校验其正确性。 1.pom文件: <?xml version="1.0" encoding="UTF-8"?> <...
  • 对访问网关的请求进行token校验,只有当token校验通过时,才转发到后端服务,否则直接返回401 本文给出的示例代码适用场景: token存放在redis中, key为用户的uid 依赖的pom.xml <?xml version="1.0" encoding=...
  • jwt token校验源码简析 1.1 前言  之前使用jwt签发了token,里面的头部包含了加密的方式、是否有签名等,而载荷中包含用户名、用户主键、过期时间等信息,最后的签名还使用了摘要算法进行不可逆的加密。  同时...
  • 前言 在最初的开发中,可以使用org.spring...此处采取aop的思想,用另类的方式实现部分接口token校验。 依赖引入 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr
  • 所以我认为token校验应该在各个资源服务中去,这样可以起到一个负载均衡的效果。比如有资源服务:用户订单服务、用户会员服务 如果我们请求订单服务,那么校验token就在订单服务中校验;如果请求用户会员服务...
  • 微信小程序消息推送配置Token校验失败问题 解决微信小程序消息推送配置Token校验失败问题  如果是Token校验失败问题,一种是URL地址访问不通,第二种是验证是返回给微信服务数据问题. 1.填写配置信息 ...
  • 1、 android Retrofit2 实现图片上传携带基本数据token校验 1.1. 服务端代码: package com.denganzhi.project; import java.io.File; import java.io.IOException; import java.util.List; import java.util....
  • 用拦截器和自定义注解实现token校验

    千次阅读 2018-04-27 18:54:50
    在应用开发中,客户端访问服务端的接口时,服务端需要进行身份token校验拦截掉无效或失效的token请求。 解决这一需求的思路,一般是在类似登录或者激活的接口里给客户端返回一个用于识别身份的唯一标识(这里就叫做...
  • 问题描述 在微服务工程中,JwtToken作为common工程下的公共模块,同时被goods8011和ucenter8081服务调用, ...在JwtToken生成的工具类中加密/解密密钥使用了UUID,在两个模块校验token的时候使用的是两
  • 一般是前后端分离或者支付宝响应的时候需要不设置csrfToken校验的接口,laravel推荐使用passport安全校验设计接口 转载于:https://www.cnblogs.com/mrszhou/p/8407224.html...
  • 最近做的一个项目用的是前后端分离的开发模式,系统是要登录后才能进行操作的,所以需要进行身份token校验,校验通过后才能得到所请求的资源。我一开始想到的是使用过滤器实现,但系统里的有些controller是不用过滤...
  • 项目中凡事涉及到用户登录注册的都需要一个登录态来验证用户的登录状态,常用的登录台无外乎是token、session啊这些标识。这里我使用的是token字段。token一般会包含用户的个人信息,如:账号、账号id、用户名等等,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,555
精华内容 1,022
关键字:

token校验