我大约有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支持自定义注释,但是找不到满足我要求的内容。
有人可以帮我吗?
我也想知道
如果我的方法正确?如果是,我该如何进一步?
否则,如何在不使代码混乱的情况下实现此功能。