awesome-fenix icon indicating copy to clipboard operation
awesome-fenix copied to clipboard

「Comment」https://icyfenix.cn/architect-perspective/general-architecture/system-security/verification.html

Open fenixsoft opened this issue 4 years ago • 12 comments

https://icyfenix.cn/architect-perspective/general-architecture/system-security/verification.html

fenixsoft avatar Apr 14 '20 13:04 fenixsoft

常规异常和业务异常都返回ConstraintViolationException统一处理,如果想区分两种异常来对用户不同展示方式,比如业务异常会提示用户详细原因,常规异常统一失败,怎么实现呢

zhupishiye avatar May 14 '20 02:05 zhupishiye

@zhupishiye 常规异常和业务异常都返回ConstraintViolationException统一处理,如果想区分两种异常来对用户不同展示方式,比如业务异常会提示用户详细原因,常规异常统一失败,怎么实现呢

不同的校验异常可以从ConstraintViolationException派生出不同的子类来表示,譬如SomeBizException extends ConstraintViolationException

对于需要自定义信息的异常,可以针对性地定义专用的异常处理器,譬如SomeBizExceptionExceptionHandler,在该处理器中返回与客户端约定的格式

同时注册一个“兜底”用的ConstraintViolationException统一异常处理器,对没有哪些没有专门定义的异常处理的派生至ConstraintViolationException的异常进行统一的处理

fenixsoft avatar May 14 '20 06:05 fenixsoft

Bean Validation在controller层的函数入参上,那还不是发生在controller层吗,或者是controller之前?不过确实更容易复用,维护。 如果逻辑比较复杂,例如要根据客户端传参从数据库查出另一个值,然后再判断,若合法,这个值还要用在下面的步骤,如果也用Bean Validation就多了一次不必要的数据库查询

UUNNFLY avatar Dec 23 '20 08:12 UUNNFLY

@UUNNFLY Bean Validation在controller层的函数入参上,那还不是发生在controller层吗,或者是controller之前?不过确实更容易复用,维护。 如果逻辑比较复杂,例如要根据客户端传参从数据库查出另一个值,然后再判断,若合法,这个值还要用在下面的步骤,如果也用Bean Validation就多了一次不必要的数据库查询

只是这里的演示代码拿了控制器的作为例子而已,Bean跨越了各个层次,验证的代码逻辑也不与任何一个层耦合,所以在哪里验证都是可行的、可选的。

譬如文中也举了个例子,Hibernate做持久化时也会进行验证,这就在DAL而不是在Controller中了。

fenixsoft avatar Dec 23 '20 12:12 fenixsoft

@Pass、@PassOrPresent 应该是@past @PastOrPresent

luotaiqian avatar Feb 07 '21 07:02 luotaiqian

@pass、@PassOrPresent 应该是@past @PastOrPresent

感谢指正,已修改

fenixsoft avatar Feb 07 '21 07:02 fenixsoft

文章很喜欢。但是像评论中说的验证会多一次数据库查询,业务中还要查出来再用 在jpa中非常常见。很纠结。 代码干净和多一次查询难以取舍。

WellJay avatar Oct 08 '21 09:10 WellJay

@WellJay 文章很喜欢。但是像评论中说的验证会多一次数据库查询,业务中还要查出来再用 在jpa中非常常见。很纠结。 代码干净和多一次查询难以取舍。

是否可以再做个配置项,验证需要的内容配置放入线程本地变量中存池备用

Durianyang avatar Dec 29 '21 06:12 Durianyang

之前也推过这种注解式的校验方式和自定义注解完成一些业务逻辑校验,但是一直没解决这个问题: 1)多次查询问题,两个注解间经常有重复查询,很恼火 期待大神们的思路

Liubey avatar Dec 30 '21 03:12 Liubey

而放到类外面这需要__想__前面代码那样 -> 而放到类外面这需要**像**前面代码那样

lehug avatar Jan 08 '22 08:01 lehug

@Liubey 之前也推过这种注解式的校验方式和自定义注解完成一些业务逻辑校验,但是一直没解决这个问题: 1)多次查询问题,两个注解间经常有重复查询,很恼火 期待大神们的思路

数据库开启缓存

972424611 avatar May 20 '22 01:05 972424611

学习了,减少重复代码的优雅方式

yuerugou54 avatar Aug 25 '22 13:08 yuerugou54