我试图让一个使用球衣(jax-rs)实现资源的spring boot应用程序工作。该应用程序配置了 ResourceServer,并且使用 JWT 令牌进行身份验证工作正常。所以我可以使用 HttpSecurity 配置控制访问。
但是在我的资源中,我想使用 GlobalMethodSecurity。所以基本上我只想允许调用者使用 JWT 令牌并使用注释进行角色检查(例如@RolesAllowed))
不幸的是,我所有的@RolesAllowed 都被忽略了。
我正在做这样的事情:https ://github.com/phosphene/spring-boot-session-jersey-test-demo
只是这个例子 - 虽然启用了全局方法,但实际上并没有任何注释。
那么,到目前为止我做了什么?我启用了全局方法安全性。此外,我的 scanBasePackages 确实包括我项目中的所有类(资源等)。
@Configuration
@SpringBootApplication(scanBasePackages = {"org.jaun.clubmanager"})
@EnableWebSecurity
@EnableGlobalMethodSecurity(
securedEnabled = true,
jsr250Enabled = true,
prePostEnabled = true)
public class MemberApplication {
}
我有一个注册所有资源的 JerseConfig:
@Component
@ApplicationPath("/api")
public class JerseyConfig extends ResourceConfig {
public JerseyConfig() {
register(...);
}
}
我的 ResourceServer 类看起来像这样(并且有效,这意味着如果没有 Bearer 令牌,访问将被拒绝)。准备就绪的东西总是被允许的,并用于我的 docker:
@Configuration
@EnableResourceServer
public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter {
// ...
@Override
public void configure(HttpSecurity http) throws Exception {
http.cors() //
.and() //
.authorizeRequests() //
.antMatchers("/**/readiness").permitAll();
}
}
现在,当我将 @DenyAll 添加到我的球衣资源时,就可以访问了。怎么了?
@Path("/subscription-periods")
@DenyAll
public class SubscriptionPeriodResource {
}
我似乎缺少一些小东西。我阅读了所有其他类似的谷歌帖子,但还没有找到解决方案。
如果你想看看我的项目。在这里:https ://github.com/olijaun/club-manager spring boot 项目位于 club-manager-springboot 文件夹中。我要保护的资源之一就是这个:https ://github.com/olijaun/club-manager/blob/master/club-manager-member/src/main/java/org/jaun/clubmanager/成员/应用程序/资源/SubscriptionPeriodResource.java
感谢您的任何提示!