Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于注释的api身份验证_Java_Spring_Spring Boot - Fatal编程技术网

Java 基于注释的api身份验证

Java 基于注释的api身份验证,java,spring,spring-boot,Java,Spring,Spring Boot,我有大约70个API,其中大多数是通过以下基于令牌的方法来保护的。有(比如说20个)不需要任何令牌的开放api 对于安全api的身份验证,我最初考虑在spring过滤器中实现它,并跳过开放api的身份验证。像下面这样 @Component class AccountFilter extends GenericFilterBean { @Override public void doFilter(ServletRequest req, Servlet

我有大约70个API,其中大多数是通过以下基于令牌的方法来保护的。有(比如说20个)不需要任何令牌的开放api

对于安全api的身份验证,我最初考虑在spring过滤器中实现它,并跳过开放api的身份验证。像下面这样

    @Component
    class AccountFilter extends GenericFilterBean {
        @Override
        public void doFilter(ServletRequest req, ServletResponse res, 
             FilterChain chain) {
             if(request.getRequestURI().contains.(list of open apis)) {
                chain.doFilter(request, response);
                return;
             } else {
                /*
                 * logic for token validation 
                 *
             }
        }
    }
但他很快发现这变得单调乏味。我的意思是,为20个API添加if-else会使代码看起来杂乱无章

最后,我考虑创建一个自定义注释,比如@Authenticator,并在那里实现令牌验证逻辑。将此注释放在安全api的RestController方法上,并从开放api中省略它

@RentionPolicy
@Target
@interface Authenticator {

}

@RestController
public class TestController {

     @Authenticator
     @GetMapping(/api/v1/securedapi)
     public void testSecurily() {

     }

     // Omit @Authenticator from non secured api
     @GetMapping(/api/v1/api)
     public void test() {

     }

}
不幸的是,我找不到任何对我有帮助的东西。我所能找到的只是SpringSecurity,但目前还不在我的范围之内

我知道spring支持自定义注释,但我找不到任何满足我要求的东西

有人能帮我吗

我也想知道

  • 如果我的方法是正确的?如果是,我如何继续

  • 如果不是的话,我如何在不混乱代码的情况下实现此功能


  • 为什么不使用扩展
    websecurityConfigureAdapter
    的身份验证配置呢?这些都是遗留api,它们没有遵循正确的结构。例如/api/v1/admin是不安全的,但是/api/v1/admin/product是安全的。所以,如果我在matcher中写它,两者都将以相同的方式通过。这就是为什么我想要一种基于注释的方法,在这种方法中,我可以直接将注释放在我想要保护的api上,看看这里的示例:您可以将角色赋予端点,这样一个端点可以需要角色,而另一个端点则不需要角色。