Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现一个包含@PreAuthorize到控制器的接口会导致一些错误,为什么?_Java_Spring_Spring Mvc_Spring Security_Spring Boot - Fatal编程技术网

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
?还是只需要使用这些方法就足够了?正确的安全逻辑是什么?我找到了这个问题的答案*