@Secured和@PreAuthorize注释可以使用哪些方法?

时间:2018-07-19 11:41:31

标签: java spring spring-security

我有以下示例:

WhateverController:

@Controller
@RequestMapping(value = "api/whatever")
public class WhateverController {

    @Autowired private WhateverService whateverService;

    @RequestMapping(value = "/list", method = GET)
    @Secured({ "ROLE_WHATEVER_CANSEARCH" })
    @ResponseBody
    public List<WhateverDTO> findList(@RequestParam(value = "values") String[] values) {
        return whateverService.findThings(values);
    }

}

任何服务:

@Service
public class WhateverService {

    @Autowired private WhateverDAO whateverDAO;

    public List<WhateverDTO> findThings(String[] values) {
        //...
        validate();
        return whateverDAO.findThings(values);
    }

    @Secured({ "ROLE_SPECIFICPERMISSION" }) // Throws AccessDeniedException
    private void validate() {
        if(thing) throw new RuntimeException("You can't...");
    }

}
  1. 在“ WhateverService”上的“ validate”方法中,@ Secured工作是否会注释?
  2. 如果不是,那为什么呢?
  3. @PreAuthorize注释是否适用相同的行为?

1 个答案:

答案 0 :(得分:3)

不,不是因为它是私有的,而是因为Spring-Security基于Spring-AOP。 在Spring-AOP上,相同类中的方法之间的调用不会调用方面。

使用@Secured批注,将在方法之前进行测试。如果用户的角色不正确,则会引发异常。

@PreAuthorize实际上是相同的,除了它允许更高级的行为。

您还可以使用WebSecurityConfigurerAdapter配置安全性。 并且不要忘记使用@EnableGlobalMethodSecurity(prePostEnabled = true)

启用Pre / post注释