美文网首页
spring boot 编写不需要登录的注解

spring boot 编写不需要登录的注解

作者: JAVA弑云 | 来源:发表于2019-12-17 09:27 被阅读0次

    先讲述背景,项目中有个sso登录模块,他会拦截所有的请求,如果该请求中的参数没有token或者token失效,就会直接返回需要登录的提示,但是有些查询静态数据的接口需要在登录前就需要调用,所以无法带token,之前的做法就是在yml文件中添加哪些不需要token验证的请求路径,比如/login/title.每次都得这样手工配置,很容易出现问题,所以便想出了用注解解决问题

    先贴注解代码

    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    
    @Retention(RetentionPolicy.RUNTIME)
    public @interface NotNeedLogin {
    }
    
    

    注解不需要写多少内容,主要在解析注解上面,下面展示我的注解处理代码

     public String scanNotNeedLogin(){
            //获取所有的controller
            Map<String, Object> listControllerBean = applicationContext.getBeansWithAnnotation(Controller.class);
            Set<String> strings = listControllerBean.keySet();
            StringBuffer exludPath=new StringBuffer();
            for (String controllerName:strings
                 ) {
                //获取对应的class
                Class<?> controllerClass = listControllerBean.get(controllerName).getClass();
                //获取一级请求路径
                RequestMapping firstAnnotation = controllerClass.getAnnotation(RequestMapping.class);
                String[] value = firstAnnotation.value();
                String firstValue = value[0];
                if(!firstValue.startsWith("/")){
                    firstValue="/"+firstValue;
                }
                //获取所有方法
                Method[] methods = controllerClass.getMethods();
                //遍历
                for (Method method:methods
                     ) {
                    //只有包含NotNeedLogin的注解才进行进一步处理
                    if(method.isAnnotationPresent(NotNeedLogin.class)){
                        RequestMapping annotation = method.getAnnotation(RequestMapping.class);
                        String[] value1 = annotation.value();
                        String secondValue=value1[0];
                        if(!secondValue.startsWith("/")){
                            secondValue="/"+secondValue;
                        }
                        exludPath.append(firstValue+secondValue+",");
                    }
                }
    
            }
            return exludPath.toString();
        }
    

    然后将获取的到的exludpath放到filter处理代码中,

    registration.addInitParameter("EXCLUDED_PATHS", exludpath);
    

    即可解决问题

    相关文章

      网友评论

          本文标题:spring boot 编写不需要登录的注解

          本文链接:https://www.haomeiwen.com/subject/syndnctx.html