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

学校网站建设方案及报价优秀设计集锦网站

学校网站建设方案及报价,优秀设计集锦网站,宁波seo网络推广软件系统,京津冀协同发展的战略意义一.登录校验过滤器的实现思路 我们要实现登录校验过滤器,就要首先明白登录校验过滤器的实现思路。登录校验过滤器是用来实现登录校验的。那么首先思考第一个问题,所有的请求都需要校验吗? 答案是否定的,因为login请求就不需要过滤…

一.登录校验过滤器的实现思路

我们要实现登录校验过滤器,就要首先明白登录校验过滤器的实现思路。登录校验过滤器是用来实现登录校验的。那么首先思考第一个问题,所有的请求都需要校验吗?

答案是否定的,因为login请求就不需要过滤器校验,因为登录请求本身就不携带JWT令牌,登录的目的就是为了获取JWT令牌用于后续的校验,如果login请求也需要校验的话,那么将没有用户可以登录成功进而访问服务器中的资源。因此登录请求"/login"是不需要校验的,要直接放行。

下面思考第二个问题,当我们拦截到请求后,什么情况下才可以放行?答案是当拦截到的请求中的请求头header所携带的JWT令牌存在且有效时才能够放行执行业务操作,只要不存在或者无效,那么就不会放行执行操作,从而跳转到登录页面。

基于以上分析,我们绘制出登录校验过滤器的流程分析图。

二.代码实现

package com.gjw.filter;import com.alibaba.fastjson.JSONObject;
import com.gjw.pojo.Result;
import com.gjw.util.JwtUtils;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;import java.io.IOException;@Slf4j
@WebFilter(urlPatterns = "/*")
public class LoginCheckFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;// 1.获取请求的urlString requestURL = request.getRequestURL().toString();log.info("获取请求的URL:{}",requestURL);// 2.判断url中是否包含"login"if (requestURL.contains("login")) {log.info("登录操作,直接放行......");// 如果包含,直接放行filterChain.doFilter(servletRequest,servletResponse);return;}// 3.不包含则获取JWT令牌并检验String jwt = request.getHeader("token");// 4.检验JWT令牌是否存在,如果不存在,则返回错误结果(未登录)if(!StringUtils.hasLength(jwt)) {   // jwt不存在或者为null,返回falselog.info("请求头token为空,返回登录页面......");Result error = Result.error("NOT_LOGIN");String notLogin = JSONObject.toJSONString(error);// 没有RestController注解,无法将直接return的数据以JSON格式返回,需要强转为JSON  手动转换:对象----->JSON格式的数据response.getWriter().write(notLogin);  // 通过response对象返回JSON格式的数据return;}// 5.如果存在,校验JWT令牌是否正确,如果解析失败,则返回错误结果(未登录)try {JwtUtils.parseJWT(jwt);     // 解析成功放行} catch (Exception e) {     // 失败捕获异常e.printStackTrace();log.info("解析失败,返回未登录的错误信息......");Result error = Result.error("NOT_LOGIN");String notLogin = JSONObject.toJSONString(error);// 没有RestController注解,无法将直接return的数据以JSON格式返回,需要强转为JSON  手动转换:对象----->JSON格式的数据response.getWriter().write(notLogin);  // 通过response对象返回JSON格式的数据return;}// 6.JWT令牌存在且解析成功,放行log.info("令牌合法,放行。");filterChain.doFilter(servletRequest,servletResponse);}
}

 1.获取请求的url

我们首先要获取到请求的url地址,为了获取请求的url地址,需要将ServletRequest和ServletResponse强转为HttpServletRequest和HttpServletResponse。强转后通过调用HttpServletRequest的getRequestURL()方法获取URL路径。

2.判断url中是否包含"login"

获取到URL路径后,接下来我们首先要判断路径中是否包含关键字"login",如果包含,那么证明该请求是一个登录请求,直接放行即可。使用doFilter方法将HttpServletRequest和HttpServletResponse对象传递进去。然后使用return直接结束该方法。

3.不包含则获取JWT令牌并检验

如果不包含关键字"login",那么证明该请求不是一个登录请求,那么就进行下面两部判断:

首先获取该请求中请求头header的token字段,从而获取到JWT令牌,然后判断JWT令牌是否存在。使用request.getHeader("token")来获取JWT令牌的字符串。

4.检验JWT令牌是否存在,如果不存在,则返回错误结果(未登录)

如果不存在,即使用StringUtils工具类的hasLength方法(空串或者null返回false,有值返回true)判断结果为空串或者null,取反后(!)为true。

我们与前端约定好的

那么调用Result结果封装类中的error方法,传递一个"NOT_LOGIN"。但是我们要响应给前端的是一个JSON格式的数据,那么如何将这个Result对象转为JSON再响应给前端呢?在controller当中我们可以使用注解@RestController,会自动将方法的返回值转为JSON格式的数据返回回去,但是现在是在Filter过滤器当中,因此要手动转换。我们可以使用alibaba提供的fastJSON的工具包,首先引入依赖

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.52</version>
</dependency>

然后使用JSONObject将对象转为JSON格式的字符串,然后我们将该字符串相应给浏览器。通过响应对象response调用其中的getWriter()获取一个输出流,再调用里面的writer()方法将要响应未登陆的数据notLogin传递给前端。然后直接结束方法,跳转到登录页面。

5.如果存在,校验JWT令牌是否正确,如果解析失败,则返回错误结果(未登录)

如果令牌存在,那么首先校验令牌的合法性,如果合法,直接放行。如果不合法,那么和上面的代码逻辑一样。因此我们需要使用try/catch捕获异常信息,如果未捕获到异常,那么直接放行;如果捕获到异常,那么执行和上面一样的代码逻辑。

6.JWT令牌存在且解析成功,放行

令牌存在且解析成功,执行doFilter方法放行即可。


文章转载自:

http://iGKh4011.smmby.cn
http://AFru9rtN.smmby.cn
http://9wvZy5cv.smmby.cn
http://QyeOfHQ0.smmby.cn
http://6691vBNE.smmby.cn
http://09cav3e2.smmby.cn
http://RumcPFLO.smmby.cn
http://JYQ5oNZD.smmby.cn
http://GNwBiVMu.smmby.cn
http://11rqF4DE.smmby.cn
http://aVc9aBmx.smmby.cn
http://bC7HpTKL.smmby.cn
http://8k45cq3z.smmby.cn
http://xdqqXHjH.smmby.cn
http://focxI0Ev.smmby.cn
http://BYM1YTE1.smmby.cn
http://bWEIK2I6.smmby.cn
http://2Rr6bltL.smmby.cn
http://nRUdfQXI.smmby.cn
http://eJSjdhJz.smmby.cn
http://Ail6dzEl.smmby.cn
http://8k16kUfG.smmby.cn
http://Z6cONqtp.smmby.cn
http://fxlf534q.smmby.cn
http://gOvNwJhS.smmby.cn
http://ycG5Nggf.smmby.cn
http://yjXlMdkV.smmby.cn
http://PoKhV629.smmby.cn
http://gOEFOo7U.smmby.cn
http://vvcMjIR2.smmby.cn
http://www.dtcms.com/wzjs/627800.html

相关文章:

  • 北京网站制作官网市场营销策划合同模板
  • 网站的空间是什么网页设计公司的市场定位
  • 洛阳做网站公司有哪些衡水做网站推广找谁
  • 如果在网站做推广连接移动网站开发流行
  • 开发网站需要时间网站后台登录密码修改
  • 怎样做模具钢网站网络规划设计师考试资料百度云
  • 福州专业网站制作的公司化妆品网站优化
  • 网站关键词筛选阿里云主机怎么做两个网站
  • 网站建设中 模板商业网站建设案例课程
  • 青岛网站做网站多少钱中小企业网络构建
  • 响应式自适应织梦网站模板群晖nda做网站
  • 苏州做公司网站设计的公司建设网站需要机房吗
  • 网站建设营销型需要网站建设的人多吗
  • 北京做手机网站的公司网业加速器
  • 通辽市北京网站建设广告联盟有哪些
  • 网站怎样优化seo每平每屋在线设计家官网
  • 欧洲网站设计泰安市人才网官网
  • 网站 竞争分析西安有什么好玩的地方景点推荐
  • 首饰网站建设策划案做网站怎么赚钱 111
  • 哈尔滨自助模板建站咸宁网站制作公司
  • 网站建设费用明细 xls编程免费自学网站
  • 上国外网站的dns做网站可以使用rem单位吗
  • 做网站费用分几块沈阳专业网站制作设计
  • 南通网站推广排名北欧风格装修效果图
  • 网站建设教程学习aspx网站跳转代码
  • 2小时学会php网站建设wordpress 制作网站
  • 网站 谁建设谁负责php网站做安卓客户端
  • 网站群建设优点公司注册网上怎样注册
  • 成都网站建设十强企业网页设计版权代码
  • 怎样去权重高的网站做外链合益环保东莞网站建设