Java 实现一个包含@PreAuthorize到控制器的接口会导致一些错误,为什么?
我有这个Java 实现一个包含@PreAuthorize到控制器的接口会导致一些错误,为什么?,java,spring,spring-mvc,spring-security,spring-boot,Java,Spring,Spring Mvc,Spring Security,Spring Boot,我有这个控制器和一个接口,当我尝试实现应用预授权注释的接口时,它会损坏控制器,因此方法在这种情况下不起作用。我知道我可以直接在控制器中应用注释,但如果我可以使用Spring示例中所述的接口应用注释,我会很高兴 public interface PermissionsSecurity { @PreAuthorize("hasRole('ROLE_ADMIN')") String deletePost(@RequestParam(value = "id", required = tr
控制器
和一个接口
,当我尝试实现应用预授权
注释的接口时,它会损坏控制器,因此方法
在这种情况下不起作用。我知道我可以直接在控制器中应用注释,但如果我可以使用Spring示例中所述的接口应用注释,我会很高兴
public interface PermissionsSecurity {
@PreAuthorize("hasRole('ROLE_ADMIN')")
String deletePost(@RequestParam(value = "id", required = true) Long id);
@PreAuthorize("hasRole('ROLE_ADMIN')")
String permissions(ModelMap model, @RequestParam(value = "q", required = false) String q);
}
控制器:
@Controller
public class PermissionsController implements PermissionsSecurity{
@Autowired
@Qualifier("permissionValidator")
private Validator validator;
@Autowired
private Permissions permissionsService;
@InitBinder
private void initBinber(WebDataBinder binder){
binder.setValidator(validator);
}
@RequestMapping(value="/permissions:delete", method=RequestMethod.POST)
public String deletePost(@RequestParam(value = "id", required = true) Long id) {
permissionsService.delete(id);
return "redirect:/permissions";
}
@RequestMapping(value = "/permissions", method=RequestMethod.GET)
public String permissions(ModelMap model, @RequestParam(value = "q", required = false) String q){
model.addAttribute("q", (q != null)? q : "");
model.addAttribute("viewTemplate", "permissions");
model.addAttribute("roles", permissionsService.getAll());
return "welcome";
}
}
不要那样做。。。将它们放在类而不是接口上(基本上不支持从接口到类的注释继承,spring使用变通方法使其工作,像这样的接口使用代理,这反过来会导致请求映射问题。您需要强制使用基于类的代理而不是基于接口的代理来使其工作。@M.Deinum关于@Service
permissionsService?它包含存储库接口,我应该在它上面添加put@Preauthorize
?还是只需要使用这些方法就足够了?正确的安全逻辑是什么?我找到了这个问题的答案*