小编ste*_*e06的帖子

如何在我的Controller中验证(@Valid)之前检查安全访问(@Secured或@PreAuthorize)?

这是我的控制器代码:

@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界面中我们可以找到这句话:

用于指定方法访问控制表达式的注释,该表达式将被评估以决定是否允许方法调用.

但似乎事实并非如此.

validation spring controller spring-mvc spring-security

14
推荐指数
2
解决办法
1821
查看次数

Spring hibernate:无法提取结果集元数据

我尝试在我的 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)

java sql spring hibernate jpa

0
推荐指数
1
解决办法
1万
查看次数