我正在开发一个应用程序,其中我将控制器映射到/account/{id}/...
,我的目的是让一些客户端仅将这些URL用于" id"存在于数据库中。
流程如下所示:
1)客户创建新帐户(新用户添加到具有自动生成ID的数据库)
2)客户登录
3)客户端可以访问例如:/account/{id}/something
目前我的控制器映射如下:
@RestController
@RequestMapping(value = "/account/{id}")
public class ControllerName {
但是在每个控制器的方法中,我正在检查调用我的服务的用户是否存在于db中(通过检查ID是否存在)。 我认为它不好(有问题),因为同一代码重复多次。
有没有办法避免重复自己并自动化?或者这是检查用户是否存在于服务呼叫中的好方法吗?
答案 0 :(得分:1)
我认为你可以为它编写拦截器或过滤器,如下所示。
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/controller1/path1"/>
<mvc:mapping path="/controller2/path2"/>
//other controller path
<bean class="com.test.interceptor.UserInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
然后在这个拦截器中你可以验证用户存在。
public class UserInterceptor extends HandlerInterceptorAdapter {
//Inside prehandle() method you can verify user existence
}
同样,如果需要,可以使用过滤器。