0

在尝试实现 Spring Security 和 OAuth2 时,我已经能够通过一个包含 2 个 servlet 的非常简单的示例来完成工作,但是在保护其中一个 servlet 访问时遇到了问题:“AdminTestServlet”应该只授权给具有角色的用户“行政”。它在使用 WebSecurityConfigurerAdapter 的“配置”方法时起作用(参见 antMatchers):

@EnableWebSecurity(debug = true)
@EnableGlobalMethodSecurity(jsr250Enabled = true, securedEnabled = true, prePostEnabled = true)
public static class OAuth2LoginSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
      http
      .authorizeRequests(authorize -> authorize
          .antMatchers("/AdminTestServlet").hasAnyRole("ADMIN")
          .anyRequest().authenticated()
          .and()
      )
      .oauth2Login(withDefaults());
    }
  [...]
}

但现在我想删除 antMatchers 并通过注释设置授权。理想情况下,它应该是标准的 JavaEE 注释(用于 servlet 的 @ServletSecurity)。但是在尝试在 Admin servlet 上设置它们时它不起作用(即,如果我有 ADMIN 角色,我总是会收到 403 错误事件):

@WebServlet(value = "/AdminTestServlet")
@DeclareRoles("ADMIN")
@ServletSecurity(@HttpConstraint(rolesAllowed={"ADMIN"}))
public class AdminTestServlet extends HttpServlet {
   protected void doGet(...) {
      [...]
   }
}

顺便说一句,我也没有使用 Spring 特定的注释(@Secured):总是允许访问(没有 403)。有很多关于在依赖 JSR-250 的 JAX-RS 端点上设置授权注释的帖子:@RolesAllowed。但是我找不到任何关于 Servlet 这样做的信息。如果有人可以帮助我。也许这是不可能的?

谢谢

4

0 回答 0