SpringBoot案例3 登录校验

一、登录校验的实现思路是怎样的?

项目中访问核心资源,通常都要进行登录校验,访问京东商城的订单,必须要先登录才能访问查询。实现思路:可以在访问资源前进行访问的拦截,判断你当前会话是否有登录,如果没有登录拒绝访问。如果是登录的那就可以进行访问资源。

二、会话技术有哪些方式可以实现?

传统技术可以使用Cookie+Session去实现会话,进行会话跟踪。但是这种传统方式有弊端: 不能在集群服务中灵活使用,手机客户端无法支持cookie。

为了解决这些问题,可以使用令牌技术来解决。令牌技术优点是:可以在集群服务中灵活使用,移动端也可以支持。

三、JWT令牌组成部分有哪些,各自作用是什么?

JWT令牌由Header、Payload、Signature三部分组成,每部分中间使用点(.)分隔,比如:xxxxx.yyyyy.zzzzz

header.payload.signature 部分的数据会以Base64的方式进行编译。

这三部分的作用分别是:
header: 指定令牌类型,加密的算法。..

payload:存储一些令牌要携带的信息,比如用户的基本信息id,username,过期时间

signature : 保证令牌不被算改。

四、怎么使用JWT令牌?(依赖,创建,校验)

1). pom.xml 引入jwt的依赖

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

 2).  生成JWT令牌

String jwt = Jwts,builder()
.addclaims(携带的数据,是一个map集合)
.signWith(SignatureAlgorithm,HS256,秘钥)
.setExpiration(new Date(System,currentTimeMillis() + expire))
.compact();

3).解析令牌

Claims claims = Jwts.parser(l
.setsigningKey(秘钥)//要和创建令牌时的秘钥保持一致
.parseClaimsJws(令牌》//要解析的令牌
.getBody();

4).当解析不报异常,此时就代表令牌是有效的。报任何异常都意味着令牌失效。

五、项目中在什么时候去生成令牌?

在登录时生成令牌,在访问核心资源的时候进行令牌的校验

六、当前端携带令牌访问资源时怎么去拦截校验令牌的合法性?

有两种方案可以实现:
1、过滤器
2、拦截器

七、过滤器具体使用的步骤是怎样的?

使用步骤如下
1、创建一个类实现接口Filter接口,重写doFilter方法

2、类上面需要加注解: @Webpilter(urlPatterns =“/")

3、在引导类中注解: @ServletComponentscan
4、要做具体的拦截业务在doFilter中完成

public void doFilter(ServletRequest reg, ServletResponse rsp,FilterChain chain){
//登录校验拦裁
XXXXXX
//放行(如果不放行,就不执行如下语句)
chain.doFilter(reg,rsp);
yyyyyyy
}

八、拦截器具体使用的步骤是怎样的?

Interceptor使用步骤如下:

1、创建一个类实现HandlerInterceptor接口,上面加上注解

@Component

 public class LoginCheckInterceptor implements HandlerInterceptor

2、重写方法方法
        preHandler 方法可以实现在资源访问前的拦裁

3、写配置类,在里面进行注册:
        3.1 写一个类叫做配置,实现接口WebMvcConfigurer,并在类型上加上注解: @Configuration
      

  @Configuration
        public class WebConfig implements WebMvcConfigurer

        3.2 注入拦截器对象,重写方法addInterceptors 进行注册,并设定拦裁路径
 

@configuration
public class WebConfig implements WebMvcconfigurer {

@Autowired
private LoginCheckInterceptor loginCheckInterceptor;

eOverride
public void addInterceptors(InterceptorRegistry registry) {
//注册拦截器
registry.addInterceptor(loginCheckInterceptor)
.addPathPatterns("/**");
}

九、项目中异常是怎么处理的?具体怎么实现?

异常处理有两种方案:
1、在每一个controller中的方法里面单独try-catch捕获处理 (代码几余,繁琐)
2、全局异常处理 (推荐的方案]
全局异常处理的实现步骤:
1、创建一个类用来专门处理异常,在类上面加上注解: @RestcontrollerAdvice

2、在里面写一个方法用来处理异常: 该方法返回值类型用同一响应结果Result,还需要使用注解@BxceptionHandler
去定义要处理的异常类型。

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

@ExceptionHandler(Exception.class)
public Result ex(Exception e) {
Log.error("全局异常处理",e);
return Result.error("系统繁忙,请稍后重试!!“);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值