java - Spring Security,方法安全注释(@Secured)不起作用(java config)

标签 java spring security spring-security spring-boot

我正在尝试使用 @Secured("ADMIN") 设置方法安全注释(没有任何 XML,只有 java 配置,Spring Boot)。但是通过角色访问不起作用。

安全配置:

@Configuration
@EnableWebSecurity
public class AppSecurityConfiguration extends WebSecurityConfigurerAdapter{

.....

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/api/**").fullyAuthenticated().and()
                .addFilterBefore(tokenAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
    }

.....

}

我想限制对 Controller 方法的访问:

@RestController
@RequestMapping("/api/groups")
public class GroupController {

    @Autowired
    private GroupService groupService;

    @Secured("ADMIN")
    @RequestMapping
    public List<Group> list() {
        return groupService.findAll();
    }

}

通过 url 限制访问有效,使用:

.antMatchers("/api/**").hasAuthority("ADMIN")

也许我忘了指定我要按角色进行限制?

统一更新: 按照规则,@PreAuthorize("hasRole('ADMIN')")必须在Controller层还是Service层的哪一层?

最佳答案

欢迎添加

@EnableGlobalMethodSecurity(securedEnabled = true)

此元素用于在您的应用程序中启用基于注释的安全性(通过在元素上设置适当的属性),并将安全切入点声明组合在一起,这些声明将应用于您的整个应用程序上下文,专门用于 @安全。 因此你的代码应该是这样的

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class AppSecurityConfiguration extends WebSecurityConfigurerAdapter{..

关于java - Spring Security,方法安全注释(@Secured)不起作用(java config),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31186826/

相关文章:

java - Fork Join 优化

java - 我们应该为 OnClickListeners 或内部命名类使用匿名类吗?

java - Spring Boot - 不同的模型表示/多个 API

java - 使用支持灵活方法签名的 Spring 创建自定义注释

java - 如何增加Kafka Topic的分区数量

php - 安全性:用户能够命名 session 变量会出现什么问题?

php - 如何禁用 phpMyAdmin 登录页面?

java - 我如何在java中安全地实现CSRF token

java - 为什么要将私有(private)构造函数与静态嵌套类结合使用?

java - for 循环中的 index*int 如何以零结束?