使用AOP进行权限验证

IT技术2年前 (2022)更新 投稿用户
0

首要咱们定义一个切入点(匹配com.ed.controller.Seller最初的controller的所有public办法)

@Pointcut(“execution(public*com.ed.controller.Seller*.*(..))”)publicvoidcheckToken(){}
然后在进入这些办法之前进行token校验
@Before(“checkToken()”)publicvoidcheck(){
ServletRequestAttributesattributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequestrequest=attributes.getRequest();//查询cookieCookiecookie=CookieUtil.get(request,CookieConstant.TOKEN);if(cookie==null){
log.warn(“【token校验】Cookie中查不到token”);thrownewSellerAuthorizeException(ResultEnum.TOKEN_ERROR);
}//去redis里查询StringtokenValue=redisTemplate.opsForValue().get(String.format(RedisConstant.TOKEN_PREFIX,cookie.getValue()));if(StringUtils.isEmpty(tokenValue)){
log.warn(“【token校验】Redis中查不到token”);thrownewSellerAuthorizeException(ResultEnum.TOKEN_ERROR);

Java


}
}
抛出的异常可定义一个handler进行拦截,并回来自定义的对象给前端
@ControllerAdvicepublicclassSellExceptionHandler{
@ExceptionHandler(value=SellerAuthorizeException.class)
@ResponseBodypublicResultVOhandlerSellerException(SellerAuthorizeExceptione){returnResultVOUtil.error(e.getCode(),e.getMessage());
}
}
CookieUtil办法
/***获取cookie
*@paramrequest
*@paramname
*@return*/publicstaticCookieget(HttpServletRequestrequest,
Stringname){
MapcookieMap=readCookieMap(request);if(cookieMap.containsKey(name)){returncookieMap.get(name);
}else{returnnull;
}
}/***将cookie封装成Map
*@paramrequest
*@return*/privatestaticMapreadCookieMap(HttpServletRequestrequest){
MapcookieMap=newHashMap<>();
Cookie[]cookies=request.getCookies();if(cookies!=null){for(Cookiecookie:cookies){
cookieMap.put(cookie.getName(),cookie);
}
}returncookieMap;
}

© 版权声明
好牛新坐标 广告
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章