我的弹簧安全@PreAuthorize注释有问题,我在Dao界面中注释了方法,如下所示:
public interface SecurityDao {
public List<Security> listAll();
public List<Security> getUserbyId(String id);
@PreAuthorize("hasRole('ROLE_4')")
public void addUser(String username, byte securityLevel);
@PreAuthorize("hasRole('ROLE_4')")
public void deleteUser(String username);
@PreAuthorize("hasRole('ROLE_4')")
public void updateUser(String username, byte securityLevel);
}
这个想法是只有ROLE_4可以添加,删除或更新用户(通过JSP POST表单),这种方法很好,除非小于ROLE_4的用户尝试更新用户,例如,我得到org.springframework.web.servlet.PageNotFound.handleHttpRequestMethodNotSupported Request method 'POST' not supported
我期待403 ...我可以处理自定义页面。
@RequestMapping(value="/EditUser", method=RequestMethod.POST)
public ModelAndView editUser(@RequestParam
String username, byte securityLevel, ModelMap map, boolean isNewUser) {
if (isNewUser){
SecDao.addUser(username, securityLevel);
}else{
SecDao.updateUser(username, securityLevel);
}
ModelAndView model = new ModelAndView("userManagement");
String applicationVersion = applicationInformation.get("version");
model.addObject("version", applicationVersion);
List<Security> listSec = SecDao.listAll();
model.addObject("user", listSec);
return model;
}
我的控制器RequestMethod是POST来处理成功的提交(正如我上面说的那样工作正常)。
我见过类似的问题,但没有答案,有没有人以前经历过这种行为?这是预期的吗?
提前致谢,
亚当