我已经为休息控制器配置了 Spring Boot 。我创建了许多API,但我需要验证我的令牌信息在每个API乞讨,是用户授权或不提供令牌的基础。
在登录过程中,我正在生成令牌,该令牌在每个API中都需要用于访问信息。如果令牌无效,则需要返回消息Sorry, your provided token information has been expired or not exists.
以下是“我的API。
@RequestMapping(value="/delete", method= RequestMethod.DELETE)
public Map<String, Object> delete(@RequestBody String reqData,HttpServletRequest request) {
Map<String, Object> m1 = new HashMap<String,Object>();
JSONObject jsonData = new JSONObject(reqData);
Token token= tokenDao.getByTokenCode(jsonData.getString("token"));
if(token==null){
m1.put("status", "error");
m1.put("message", "Sorry, your provided token information expired or not exists.");
return m1;
}
//here my logic to remove user from database.
}
是否有任何方法可以在服务方法或使用注解中检查令牌功能,因此我需要在每个API中删除相同的代码,并需要使用一个公共功能。
3条答案
按热度按时间dnph8jn41#
您可以使用HandlerInterceptor来处理您的token。
**HandlerInterceptor.preHandle(HttpServletRequest request,HttpServletResponse response,Object handler)**将在任何RequestMapping之前执行。
在preHandle中验证您的token。如果token有效,则继续,否则抛出异常,控制器建议将处理其余部分。
暴露MappedInterceptor的bean类,spring会自动加载HandlerInterceptor bean包含的内容。
ControllerAdvice和ExceptionHandler可以捕获异常并返回错误信息
完整示例
tkqqtvp12#
对于控制器,传递用户ID和令牌并检查令牌。你需要根据
user id
参数更新dao
方法。xoshrz7s3#
您可以使用cache,而不是从数据库中获取token并与当前token匹配。创建自己的缓存对象,如
Map
或静态string
,它将具有最新的令牌。并且您可以直接将传入令牌与来自缓存的此令牌进行比较。不需要每次都访问数据库。