Java 基于注释的api身份验证
我有大约70个API,其中大多数是通过以下基于令牌的方法来保护的。有(比如说20个)不需要任何令牌的开放api 对于安全api的身份验证,我最初考虑在spring过滤器中实现它,并跳过开放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
@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上,看看这里的示例:您可以将角色赋予端点,这样一个端点可以需要角色,而另一个端点则不需要角色。