我有以下示例:
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...");
}
}
答案 0 :(得分:3)
不,不是因为它是私有的,而是因为Spring-Security基于Spring-AOP。 在Spring-AOP上,相同类中的方法之间的调用不会调用方面。
使用@Secured批注,将在方法之前进行测试。如果用户的角色不正确,则会引发异常。
@PreAuthorize实际上是相同的,除了它允许更高级的行为。
您还可以使用WebSecurityConfigurerAdapter配置安全性。
并且不要忘记使用@EnableGlobalMethodSecurity(prePostEnabled = true)