基于注释的api身份验证

时间:2018-08-27 18:07:16

标签: java spring spring-boot

我大约有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放置其他代码会使代码看起来很混乱。

最终,我想到了创建类似于@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() {

     }

}

不幸的是,我找不到任何可以帮助我的东西。我所能找到的只是Spring安全性,但是到目前为止,这还不属于我的范围。

我知道spring支持自定义注释,但是找不到满足我要求的内容。

有人可以帮我吗?

我也想知道

  1. 如果我的方法正确?如果是,我该如何进一步?

  2. 否则,如何在不使代码混乱的情况下实现此功能。

0 个答案:

没有答案