(javaweb)登录功能的校验与认证

目录

1.基础登录功能

2.登录校验概述

登录认证:

1.会话技术

2.三种会话技术的对比

1.cookie

2.Session

3.令牌技术

登录校验

JWT令牌

1.令牌介绍

2.生成和校验

3. 登录后下发令牌

过滤器filter

快速入门

详解(执行流程 拦截路径 过滤器链)

过滤器链

拦截器Interceptor

 快速入门

详解

异常处理


1.基础登录功能

认证:根据用户名和密码校验用户身份的过程。登录成功才可以访问系统中的信息。否则就拒绝访问。

校验:当发起请求时,服务端判断是否登录,如果登录则进行正常的业务操作。(核心)

2.登录校验概述

问题:在登录的界面直接复制访问上面的URL地址,仍然能够访问到,存在不安全的问题。

http协议:无状态的--每一次请求都是独立的 下一次请求并不会携带上一次的请求数据--效率高

浏览器和服务器进行交互--基于http协议

要在服务端判断用户是否已经登录--就需要在员工登录成功之后有一个登录标记(web中的会话技术)

如果一直判断是否完成登录再执行相关操作,就会十分的繁琐---解决方法:统一拦截

拦截浏览器所发送的请求,对请求进行校验,校验员工是否登录

校验方式:获取登录标记---若获取到且没有问题---已经登录--就放行(访问正常的业务接口)

                                       ---若未获取或者获取到错误的信息,直接给前端响应一个错误信息,前端自己跳转到登录页面

登录认证:

1.会话技术

会话:浏览器与服务器之间的一次连接

用户打开浏览器第一次访问服务器--会话建立   其中任何一方断开--会话结束     一次会话包含多个请求和响应

浏览器和服务器都没有关闭 请求都是在一次会话当中完成的

会话和浏览器相关联

若多次请求都是来自于同一个会话--就可以在多次请求之间共享数据

2.三种会话技术的对比

1.cookie

 

存在cookie---之前已经登录完成

服务器会自动的将cookie响应给浏览器  浏览器接收到会自动存储在浏览器本地  后续请求浏览器会自动将cookie携带到服务端

自动化进行:cookie是http协议中支持的技术,各大厂商都支持这一标准

//只要其中任意一个不同--就是跨域cookie不能跨域

//其中 端口号和ip号都不同 属于跨域

2.Session

session--服务器端会话跟踪技术  存储在服务端 底层基于cookie来实现

请求完成--服务器自动创建session对象,session都有对应的id  服务端通过cookie将id响应给客户端浏览器(在响应头当中增加set-cookie这个响应头)  浏览器接收到id值自动存储

//其中 1就是id值

3.令牌技术

令牌技术--用户身份的标识--本质:就是一个字符串  登陆成功--生成令牌--合法技术的凭证   最后将技术响应给前端

浏览器接收到令牌--将令牌存储起来:可以存储在cookie当中 也可存储在其他的存储空间当中

后续的操作都需要将令牌携带到服务端--服务端校验令牌的有效性

要共享的数据存储在令牌当中

令牌技术--主流方案

登录校验

JWT令牌

1.令牌介绍

2.生成和校验

 首先要引入依赖

java代码来解析jwt令牌

此时:已成功解析出来   一旦有误:解析失败  验证了它安全可靠  已经过期的令牌则已失效 不能使用解析

3. 登录后下发令牌

登陆成功 生成jwt令牌 并给前端下发

统一拦截 并校验令牌的有效性:过滤器filter 拦截器interceptor

过滤器filter

快速入门

要访问后面的资源--必须先经过filter  资源访问完毕 又会回到过滤器

init初始化方法--资源及环境的准备操作(只调用一次)     

与之对应:destroy资源的释放和环境的清理(服务器关闭时调用 只调用一次)

每次拦截到请求都会调用doFilter这个方法

/*代表所有--指的是当前服务器要拦截所有的请求

package com.itheima.filter;

import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;


@Component
@WebFilter(urlPatterns = "/*")// /*表示要拦截所有
public class DemoFilter implements Filter {


    @Override//初始化 只调用一次
    public void init(FilterConfig filterConfig) throws ServletException {

        System.out.println("init方法执行了");
    }

    @Override//拦截到请求之后调用 调用多次
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("拦截到了请求");
        chain.doFilter(request,response);


    }

    @Override//销毁方法 只调用一次
    public void destroy() {
        //Filter.super.destroy();
        System.out.println("destroy销毁方法执行了");
    }
}

详解(执行流程 拦截路径 过滤器链)

 

放行:让其访问对应的web资源

过滤器链

@WebFilter(urlPatterns = "/*")
public class AbcFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("demo拦截到了请求 放行前");
        chain.doFilter(request,response);
        System.out.println("demo拦截到了请求 放行后");
    }
}

 执行的优先级与类名有关系

拦截器Interceptor

 快速入门

/**代表拦截所有

详解

Tomcat--servlet容器 只识别servlet

servlet转给controller,先要被拦截器所拦截,对请求进行处理

filter拦截所有 但是intercepter只会拦截进入spring中的

异常处理

有异常:如何处理?---全局异常处理器--给前端响应统一的结果result,result中封装错误的信息。

 这个可以将方法的返回值转化为JSON格式 

exception.class(表示要捕获所有的异常)

//result中封装错误的提示信息 最终将result响应给前端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值