JavaWeb学习打卡-Day4-会话技术、JWT、Filter、Interceptor
会话技术
会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。
会话跟踪方案:
客户端会话跟踪技术:Cookie 优点:是HTTP协议中支持的技术,是官方提供的。 缺点: 移动端APP无法使用Cookie。 不安全,用户可以自己禁用Cookie。 Cookie不能跨域。 服务端会话跟踪技术:Session 优点:存储在服务端,安全 缺点: 服务器集群环境下无法直接使用Session。 Cookie的缺点。 令牌技术 优点: 支持PC端、移动端。 解决集群环境下的认证问题。 减轻服务器端存储压力。 缺点:需要自己实现。
JWT
JWT简介
全称:JSON Web Token 定义了一种简洁的、自包含的格式,用于在通信双方以json数据格式安全的传输信息。由于数字签名 的存在,这些信息是可靠的。 组成: Header(头):记录令牌类型 ,签名算法 等。采用Base64编码。例如:{“alg”:“HS256”,“type”:“JWT”} Payload(有效载荷):携带一些自定义信息 ,默认信息 等。采用Base64编码。例如:{“id”:“1”,“username”:“Tom”} Signature(签名):通过指定的签名算法,将header、payload,再加入指定秘钥计算而来。防止Token被篡改,确保安全性。
JWT场景:登录认证
令牌生成:登录成功后,生成JWT令牌,并返回给前端。 令牌校验:后续每个请求,都要携带JWT令牌。在请求到达服务端后,对令牌进行统一拦截、校验。JWT校验时使用的签名秘钥,必须和生成JWT令牌时使用的秘钥是配套的,如果JWT令牌解析校验时报错,则说明JWT令牌被篡改或失效了,即令牌非法 。
过滤器(Filter)
介绍
Filter 过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一 。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 过滤器一般完成一些通用的操作,比如:登录校验、统一编码处理、敏感字符处理等。
入门
定义Filter:定义一个类,实现 Filter接口,并重写其所有方法。 配置Filter:Filter类上加 @Webfilter 注解,配置拦截资源的路径。引导类(启动类)上加 @ServletComponentScan 开启Servlet组件支持。@WebFilter ( urlPatterns = "/*" )
public class DemoFilter implements Filter { public void init ( FilterConfig filterConfig) throws ServletException { Filter . super . init ( filterConfig) ; } public void doFilter ( ServletRequest request, ServletResponse response, FilterChain chain) { System . out. println ( "拦截方法执行,拦截到了请求.." ) ; chain. dofilter ( request, response) ; } public void destroy ( ) { Filter . super . destroy ( ) ; }
}
Filter拦截路径
拦截路径 urlPatterns值 含义 具体路径 /login 只有访问 /login 路径时,才会被拦截 目录拦截 /emps/* 访问/emps下的所有资源,都会被拦截 拦截所有 /* 访问所有资源,都会被拦截
过滤器链
一个web应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链 注解配置的Filter,优先级是按照过滤器类名(字符串)的自然排序。
拦截器(interceptor)
介绍
是一种动态拦截方法调用的机制,类似于过滤器。 是Spring框架中提供的 ,用来动态拦截控制器方法的执行。 用来拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码。
入门
定义拦截器,实现HandlerInterceptor接口,并重写其所有方法。@Component
public class LoginCheckInterceptor implements HandlerInterceptor { @Override public boolean preHandle ( HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception { System . out. println ( "preHandle ..." ) ; return true ; } @Override public void postHandle ( HttpServletRequest req, HttpServletResponse resp, Object handler, ModelAndView modelAndView) { System . out. println ( "postHandle ..." ) ; } @Override public void afterCompletion ( HttpServletRequest req, HttpServletResponse resp, Object handler, Exception ex) { System . out. println ( "afterCompletion ..." ) ; }
}
注册拦截器@Configuration
public class WebConfig implements WebMvcConfigurer { @Autowired private LoginCheckInterceptor loginCheckInterceptor; @Override public void addInterceptors ( InterceptorRegistry registry) { registry. addInterceptor ( loginCheckInterceptor) . addPathPatterns ( "/**" ) ; }
}
拦截路径
执行流程
Filter与Interceptor
接口规范不同:过滤器需要实现Filter接口,而拦截器需要实现HandlerInterceptor接口。 拦截范围不同:Filter会拦截所有的资源,而Interceptor只会拦截Spring环境中的资源 。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78547.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!