1、会话技术
会话:打开浏览器访问web资源与服务器建立会话,一次会话可进行多次请求,关闭浏览器即关闭会话。
会话跟踪:服务器识别多次请求是否是同一个浏览器发来的,以便在同一会话的多次请求间共享数据。
(1)客户端会话跟踪技术(存在客户端):Cookie(请求头cookie,响应头set-cookie)
优缺点:移动端APP无法使用cookie、不安全用户可以自己禁用cookie、cookie不能跨域
(2)服务端会话跟踪技术(存在服务器端):Session
优缺点:存在服务器安全、服务器集群环境下无法直接使用session、是基于cookie的所以也有cookie的缺点
(3)令牌技术:JWT(JSON Web Token),用于在通信双方以json数据格式安全的传输信息。由于数字签名,所以信息可靠。包括Header(头,记录令牌类型、签名算法等)、Payload(载荷,携带自定义信息、默认信息)、Signature(签名,防止Token被篡改。将header和payload根据签名算法加密加入)
优缺点:支持pc端和移动端、解决集群环境下的认证问题减轻服务器端存储压力,但是需要自己实现
生成:
HashMap<String,Object> map = new HashMap<>();
Calendar instance = Calendar.getInstance();
instance.add(Calendar.SECOND,20);
String token = JWT.create()
.withHeader(map) //可以不设定,就是使用默认的
.withClaim("userId",20)//payload //自定义用户名
.withClaim("username","zhangsan")
.withExpiresAt(instance.getTime()) //指定令牌过期时间
.sign(Algorithm.HMAC256("fdahuifeuw78921"));//签名
解析:
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("fdahuif921")).build();
DecodedJWT decodedJWT = jwtVerifier.verify(token);
decodedJWT.getClaim("userId").asInt();//获取负载里面对应的内容
decodedJWT.getClaim("username").asString();
decodedJWT.getExpiresAt();//获取过期时间
常见异常:
SignatureVerificationException //签名不一致异常
TokenExpiredException //令牌过期异常
AlgorithmMismatchException //算法不匹配异常
InvalidClaimException //失效的payload异常(传给客户端后,token被改动,验证不一致)
2、JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
过滤器Filter:可以把对资源的请求拦截下来,实现特殊功能。一般完成一些登录校验、统一编码处理、敏感字符处理等通用操作。配置:@WebFilter(urlPatterns="/*")、@ServletComponentScan
(重温)JavaWeb--Filter 过滤器(JavaWeb 的三大组件之一)_轻狂书生FS的博客-CSDN博客
3、Intercepter拦截器(Spring框架中的):拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码。
过滤器和拦截器区别:
过滤器基于函数回调、拦截器基于反射;
过滤器几乎对所有请求起作用,拦截器只对目标执行方法起作用;
过滤器对请求进行预处理、再交给Servlet处理并且生成响应,最后Filter再对服务器响应进行后处理;
过滤器会拦截所有资源,拦截器只会拦截Spring环境中的资源
拦截器可以在方法执行前调用(preHandle),方法执行后调用(postHandle),视图页面渲染后调用(afterCompletion)。
4、异常处理:全局异常处理器,类注解@RestControllerAdvice(相当于@RestController+@ResponseBody,可以将返回的错误信息转化成JSON格式返回供前端解析)、方法注解@ExceptionHandler(响应的错误类型)