这是我的控制器代码:
@PreAuthorize("hasRole('CREATE_USER')")
@RequestMapping(method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public UserReturnRO createUser(@Valid @RequestBody UserRO userRO) throws BadParameterException{
return userService.createUser(userRO);
}
Run Code Online (Sandbox Code Playgroud)
我的需求是当没有适当角色的客户端尝试创建用户时,即使发送的数据无效,控制器也会响应"未授权".而不是那样,如果客户端(没有适当的角色)试图创建一个错误数据的用户,我的控制器会响应@Valid消息(例如:"密码不能为空"),而我希望它响应"未授权" .
在PreAuthorized界面中我们可以找到这句话:
用于指定方法访问控制表达式的注释,该表达式将被评估以决定是否允许方法调用.
但似乎事实并非如此.
我尝试在我的 Dao 中使用本机查询(从 JpaRepository 扩展),但我收到此异常:
org.springframework.orm.jpa.JpaSystemException: Could not extract result set metadata; nested exception is org.hibernate.HibernateException: Could not extract result set metadata
Run Code Online (Sandbox Code Playgroud)
这是我的本机查询:
@Repository
public interface BenchDao extends JpaRepository<Bench, Long> {
@Query(nativeQuery=true,value="UPDATE TF_BENCH SET ISDELETED = 1, SEQ = (select CASE WHEN (min(BENCH.SEQ) < 1) THEN (min(BENCH.SEQ)-1) ELSE -1 END from TF_BENCH BENCH WHERE BENCH.STAGE = (select BENCH.STAGE from TF_BENCH BENCH WHERE id =29302)) WHERE id =29302")
void deleteBench();
Run Code Online (Sandbox Code Playgroud)
当我在 Oracle SQL 开发人员上尝试此请求时,它可以工作,但通过 spring 和 hibernate 它不会。
在堆栈跟踪异常中我也有这样的消息:
Caused by: …Run Code Online (Sandbox Code Playgroud)