我正在尝试让一个spring引导应用程序工作,它使用jersey(jax-rs)实现一个资源。应用程序配置了一个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类如下所示(并且可以工作,这意味着如果没有承载令牌,访问将被拒绝)。准备就绪的东西总是被允许的,并用于我的 Docker :
@Configuration
@EnableResourceServer
public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter {
// ...
@Override
public void configure(HttpSecurity http) throws Exception {
http.cors() //
.and() //
.authorizeRequests() //
.antMatchers("/**/readiness").permitAll();
}
}
现在,当我将@denyall添加到我的jersey时,允许访问资源。怎么了?
@Path("/subscription-periods")
@DenyAll
public class SubscriptionPeriodResource {
}
我好像少了点什么。我读了所有其他类似的帖子,但还没有找到解决办法。
如果你想看我的项目。在这里:https://github.com/olijaun/club-manager springboot项目位于club manager springboot文件夹中。我想保护的资源之一就是:https://github.com/olijaun/club-manager/blob/master/club-manager-member/src/main/java/org/jaun/clubmanager/member/application/resource/subscriptionperiodresource.java
谢谢你的提示!
暂无答案!
目前还没有任何答案,快来回答吧!