Apache CXF结合OAuth2实现资源匿名访问的方法咨询
解决方案:用
@PermitAll或@SecurityIgnore跳过OAuth2认证 当然有现成的注解可以搞定这个需求!在Apache CXF的OAuth2认证体系里,你有两种常用的选择来标记无需认证的接口:
1. 标准JSR-250注解:@PermitAll
这是Java EE安全规范里的标准注解,CXF对它原生支持,兼容性更好。你只需要把它加在不需要认证的接口方法或者整个控制器类上,OAuth2的认证拦截器就会自动跳过这些请求的校验。
示例代码:
import javax.annotation.security.PermitAll; import javax.ws.rs.GET; import javax.ws.rs.Path; @Path("/manage") public class ManagementController { @GET @Path("/frontpage") @PermitAll // 标记这个接口无需认证 public String getServiceStatus() { return "Service is up and running!"; } }
2. CXF专属注解:@SecurityIgnore
如果你更倾向于使用CXF特有的工具,@SecurityIgnore也是个不错的选择,作用和@PermitAll完全一致,专门用来告诉CXF的安全组件跳过当前方法或类的安全检查。
示例代码:
import org.apache.cxf.security.SecurityIgnore; import javax.ws.rs.GET; import javax.ws.rs.Path; @Path("/manage") public class ManagementController { @GET @Path("/frontpage") @SecurityIgnore // CXF专属的忽略安全检查注解 public String getServiceStatus() { return "Service is up and running!"; } }
注意事项
- 如果你是用CXF自带的
OAuth2Feature配置的认证,不用额外做其他配置,注解会自动生效;如果是自定义的OAuth2过滤器,需要在过滤器逻辑里添加对这两个注解的检查,判断后放行请求。 - 如果要让整个控制器下的所有接口都无需认证,直接把注解加在类上即可,不用逐个方法添加。
内容的提问来源于stack exchange,提问作者Thizzer
相关产品推荐
相关产品推荐

