正如标题所暗示的那样。
Bellow是我的春季安全配置:
@Configuration
@EnableGlobalMethodSecurity(proxyTargetClass = true, prePostEnabled = true)
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AbstractAuthenticationProcessingFilter userPassAuthFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.
authorizeRequests()
.anyRequest().authenticated()
.and()
.csrf().disable();
http.addFilterBefore(userPassAuthFilter, BasicAuthenticationFilter.class)
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
}
我的控制员:
@RestController
@Transactional
public class RoleController {
@Autowired
private UserBusinessService userBusinessService
@RequestMapping(value = "/api/list_users", method = RequestMethod.GET)
@PreAuthorize("hasRole('N123ORMAL_ROLE1')")
public Iterable listUsers() {
return userBusinessService.getAllUsers();
}
}
有了这个,当尝试使用没有指定角色的用户访问 / api / list_users 时,它可以获得它,没有任何问题。即使是日志也很完美,没有注意到任何事情。在@PreAuthorize
userBusinessService
移动getAllUsers()
时,它会按预期运行:日志中会抛出错误,并返回拒绝访问。
任何人都可以帮助我使@PreAuthorize
注释适用于@Controller
与@Service
相同吗?
答案 0 :(得分:2)
我遇到了与@Transactional和@PostFilter类似的问题。问题是aop建议订购问题。
在这方面,这个问题帮助了我:Order of Spring @Transactional and Spring Security @PreAuthorize
我希望有助于解决您的问题。