向方法添加角色

时间:2016-06-09 00:30:05

标签: spring spring-security

我使用Spring Boot和Spring Security。

要创建新用户,请创建"创建"用户应该是管理员。

但如果"创造"用户只有标准角色...

@PreAuthorize("hasRole('admin')")
@RequestMapping(value = "/users", method = RequestMethod.POST)
public Long createUser(@RequestBody @Valid final UserAppDto user) {
   return userService.save(user);
}

...结果是非管理员用户能够创建新用户。

在我的UserApp课程中,对于该角色,我有:

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private Set<Role> roles = new HashSet<>();

我的主要申请

@EntityScan(basePackageClasses = {Application.class, Jsr310JpaConverters.class})
@SpringBootApplication
@EnableCaching
@EnableScheduling
public class Application implements SchedulingConfigurer{

    @Bean
    public WebSecurityConfigurerAdapter webSecurityConfigurerAdapter() {
        return new ApplicationSecurity();
    }

}

@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
}

1 个答案:

答案 0 :(得分:1)

不要对控制者使用事后注释。他们在引擎盖下使用AOP,因此它们不适用于控制器,除非它们实现接口或除非你使用proxy-target-class = true,这可能有其他缺点(*)。

这个注释应该用在服务上,因为服务bean通常作为接口绑定在控制器中,因此AOP机器将按预期工作。

限制访问url的弹簧安全方式是通过http安全,而不是通过方法安全。

特别是

(*),永远不要在同一个应用程序中混合类代理和JDK代理...