当前位置: 首页 > news >正文

国外优秀网站建设免费建设网站的画出

国外优秀网站建设,免费建设网站的画出,网站开发开题报告,小语种建网站建设通常来说鉴权都是写在网关当中,对于单体应用也可以在后台服务中通过一个过滤器实现。其实过程与网关当中的没什么不同,只是在gateway当中目前是基于netty响应式的。过程如下: 一、实现Filter接口 定义自己的过滤器,并且实现Filt…

通常来说鉴权都是写在网关当中,对于单体应用也可以在后台服务中通过一个过滤器实现。其实过程与网关当中的没什么不同,只是在gateway当中目前是基于netty响应式的。过程如下:

一、实现Filter接口

定义自己的过滤器,并且实现Filter接口:

public class AuthFilter implements Filter

二、重写doFilter方法

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;try {// 此处省略filterChain.doFilter(request, response);} catch (Exception e) {log.info("[AuthFilter.doFilter] exception: {}", e);}
}

如上代码省略处就是我们需要做业务逻辑处理的地方,我们既然要做鉴权接口,那么通常做法是获取请求头部的内容,如token,然后对token进行验证等等。

三、实现鉴权代码

首先是获取header的关键参数,我此处主要有两个,分别是 token 和 username,分别通过header当中他们的key去获取就可以。
注意我对username进行了解码操作,原因是username有可能是中文,在前端vue的过滤器不允许直接发送UTF-8的中文,所以需要进行编码处理。
如果不能保证username可能为空,需要对其判断后再进行decode,否则会抛出异常。

String token = request.getHeader("AUTHORIZATION");
String username = URLDecoder.decode(request.getHeader("_username"),"UTF-8");

拿到token和username我主要做了下面的判断:

  • token不能为空,失败返回未授权错误码。
//token为空
if (StringUtils.isEmpty(token) || "null".equals(token)) {response.sendError(CommonReturnEnum.UNAUTHORIZED.getCode(), CommonReturnEnum.UNAUTHORIZED.getName());return ;
}
  • jwt解析token,首先是根据用户名从redis当中获取,token不存在存在,就进行JWT解析验证,失败就直接返回未授权错误码。成功则继续。
//验证token
String tokenCache = redisUtil.getString(JwtUtil.REDIS_TOKEN_PREFIX + username);
if (StringUtils.isEmpty(tokenCache)) {Map<String, String> stringStringMap = JwtUtil.validateToken(token);if (ObjectUtil.isEmpty(stringStringMap)) {response.sendError(CommonReturnEnum.UNAUTHORIZED.getCode(), CommonReturnEnum.UNAUTHORIZED.getName());return;}
}
  • redis存在token,与header的对比,不同就去jwt解析,通过则继续,未通过就返回未授权。
//没过期,对比当前token和缓存的token是否一致
if (!token.equals(tokenCache)) {boolean tokenAndUser = JwtUtil.validateTokenAndUser(token, username);if (!tokenAndUser) {response.sendError(CommonReturnEnum.UNAUTHORIZED.getCode(), CommonReturnEnum.UNAUTHORIZED.getName());return;}
}
  • token续期。

在前的步骤,即使是redis不存在,或者与header的token不相同,我仍然会通过jwt去解析验证,防止redis数据异常导致问题。
续期的意思就是当用户在token的超时时间内进行了刷新,则我们会重新赋予他一个新的token,这样用户就不需要频繁登录,又不会是账号一直在线。

//token验证通过,token续期
String refreshToken = JwtUtil.refreshToken(token, username);
redisUtil.setObjectExpire(JwtUtil.REDIS_TOKEN_PREFIX + username, refreshToken,JwtUtil.REDIS_TOKEN_EXPIRE_MINUTE, TimeUnit.MINUTES);

四、实现白名单放行功能

针对某些特定的路径,是没有携带token等信息的,所以需要过滤器放行。

我这里将需要放行的白名单配置在yml文件当中:

# 请求白名单
filter:white-list: /user/login,/user/register,/websocket/server/,/integral/pageList

在过滤器使用 @value 获取:

@Value("#{'${filter.white-list}'.split(',')}")
private List<String> whiteList;

在doFilter中遍历放行:

//白名单,放行
for (String url : whiteList) {if (path.contains(url)) {filterChain.doFilter(request, response);return;}
}

以上就是简单的鉴权过滤器的实现。

http://www.yayakq.cn/news/85851/

相关文章:

  • 怎样做 云知梦 网站唐山网站制作公司
  • 建设网站的法律可行性做网站需要什么技术员
  • 游戏网站创建2015年做哪些网站能致富
  • 女孩学网站开发和动漫设计广州市地图最新版 高清晰
  • 做定制型网站金华建设公司网站
  • 企业网站如何推广idc网站备案
  • 手机版网站如何做杭州网络公司
  • 郴州网站建设推广服务网站建设服务哪里便宜
  • 珠海中英文网站建设wordpress4.9多个主题
  • 网站后台管理系统展望凡客优品官网
  • 做网站一定要正版系统吗在线做静态头像的网站
  • 网站建设asp文件怎么展现荔枝fm入口
  • 网站开发专业公司有哪些做网站的常识
  • 宿迁网站建设推广公司网站备案流程是什么
  • 卖线面网站西部数码网站管理助手卸载
  • 百度可以建网站吗html指什么
  • 建设企业网站企业网上银行登录官网下载简述常用的软件开发文档
  • 网站播放视频速度优化h5网页网站制作代码
  • 上海网站建设服推广普通话标语
  • 彩票网站是静态动态中文域名注册费用
  • 太原建站模板阿里云怎么放多个网站
  • 龙岗专业做网站xml wordpress
  • qq查冻结网站怎么做石家庄网页开发建设
  • 公司的网站开发部门叫什么wordpress时光轴主题
  • 南昌net网站开发书画院网站建设模板
  • 怎么用ps做网站效果图南昌百度搜索排名优化
  • 自己网站做第三方支付大丰网站开发
  • 购买手表网站有哪些可以免费做视频的网站
  • 重庆建网站cqiezscom建设网站公司哪家性价比高
  • 东莞企业网站建设设计网站 预算