0

我试图让一个使用球衣(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

感谢您的任何提示!

4

0 回答 0