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

东营网站建设天锐科技湖南关键词网络科技有限公司

东营网站建设天锐科技,湖南关键词网络科技有限公司,一蓝网站建设,制作视频网站教程目录 一、配置拦截器进行登录校验 1. 在config层设置拦截器 2. 实现LoginInterceptor拦截器 3. 创建JWT工具类 4. 在登录时创建JWT并存入Cookie 二、配置JWT依赖和环境 1. 添加JWT依赖 2. 配置JWT环境 本篇博客将为大家介绍了如何在Spring Boot应用中实现基于JWT的登录…

        

目录

一、配置拦截器进行登录校验

1. 在config层设置拦截器

2. 实现LoginInterceptor拦截器

3. 创建JWT工具类

4. 在登录时创建JWT并存入Cookie

二、配置JWT依赖和环境

1. 添加JWT依赖

2. 配置JWT环境

 


本篇博客将为大家介绍了如何在Spring Boot应用中实现基于JWT的登录拦截器,以保证未登录用户无法访问指定的页面。

一、配置拦截器进行登录校验

1. 在config层设置拦截器

我们首先在config层创建一个配置类,用来设置需要拦截的页面。在Spring Boot中,我们可以通过实现WebMvcConfigurer接口来配置拦截器。

创建LoginConfig类:
import com.bim.bimbookshop.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** 登录拦截配置类*/
@Configuration   // 表明这个是配置类
public class LoginConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;/*** 配置拦截器* @param registry*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor)  // 添加拦截器.addPathPatterns("/**")  // 配置拦截路径.excludePathPatterns("/login/**", "/static/**", "/templates/**"); // 配置排除路径}
}

这里的addPathPatterns("/**")表示拦截所有路径,而excludePathPatterns用于排除登录、注册等静态资源的路径。例如,/login/**表示排除所有与登录相关的请求。

2. 实现LoginInterceptor拦截器

接下来,我们需要在interceptor层创建一个拦截器类,用来判断用户是否已登录。

创建LoginInterceptor类:
import com.bim.bimbookshop.util.JwtUtil;
import io.jsonwebtoken.Claims;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 登录拦截器*/
@Component
public class LoginInterceptor implements HandlerInterceptor {/*** 过滤除登录请求外的其他请求* @param request* @param response* @param handler* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {Cookie[] cookies = request.getCookies();if (cookies != null) {for (Cookie cookie : cookies) {if ("token".equals(cookie.getName())) {String userToken = cookie.getValue();if (!StringUtils.hasText(userToken)) {response.sendError(HttpServletResponse.SC_UNAUTHORIZED); // 未认证}// 解析token并验证try {Claims claims = JwtUtil.parseJWT(userToken);claims.getSubject();  // 如果解析成功,代表用户已登录} catch (Exception e) {System.out.println("Token信息出错");return false; // 如果token无效,返回false,阻止访问}return true;  // 放行}}}return false;  // 如果没有找到token,则返回false,拒绝访问}
}

3. 创建JWT工具类

我们需要一个工具类来生成和解析JWT。这个类会提供生成JWT的功能,并在拦截器中进行解析和验证。

创建JwtUtil类:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.util.Date;
import java.util.UUID;/*** JWT工具类*/
public class JwtUtil {// 设置过期时间,单位为毫秒public static final Long JWT_TTL = 60 * 60 * 1000L; // 1小时public static final String JWT_KEY = "qcby";  // 密钥/*** 创建token* @param subject 主题,可以是用户的ID或其他信息* @return JWT token*/public static String createJWT(String subject) {SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;long nowMillis = System.currentTimeMillis();Date now = new Date(nowMillis);long expMillis = nowMillis + JWT_TTL;Date expDate = new Date(expMillis);SecretKey secretKey = generalKey();JwtBuilder builder = Jwts.builder().setId(UUID.randomUUID().toString())  // 唯一的ID.setSubject(subject)  // 主题.setIssuer("wd")  // 签发者.setIssuedAt(now)  // 签发时间.signWith(signatureAlgorithm, secretKey)  // 使用HS256算法进行加密.setExpiration(expDate);  // 设置过期时间return builder.compact();}/*** 生成加密后的秘钥* @return SecretKey*/public static SecretKey generalKey() {byte[] encodedKey = Base64.getDecoder().decode(JWT_KEY);return new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");}/*** 解析JWT* @param jwt token* @return Claims* @throws Exception*/public static Claims parseJWT(String jwt) throws Exception {SecretKey secretKey = generalKey();return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody();}
}

4. 在登录时创建JWT并存入Cookie

在用户登录成功后,我们会生成一个JWT,并将其保存到浏览器的Cookie中。这样,用户下次访问时,可以通过解析Cookie中的token来验证登录状态。

登录方法:
public ResponseResult Login(Login login, HttpServletResponse response) {// 登录验证逻辑// 登录成功后,根据用户ID生成JWTString token = this.jwtUtil.createJWT(String.valueOf(user.getUserId()));// 将token存入Cookie中Cookie cookie = new Cookie("token", token);cookie.setPath("/");  // 将cookie作用域设置为整个网站cookie.setMaxAge(36000);  // 设置cookie过期时间为10小时response.addCookie(cookie);  // 将cookie添加到响应中return new ResponseResult("登录成功");
}

二、配置JWT依赖和环境

1. 添加JWT依赖

为了能够使用JWT库,我们需要在pom.xml中添加依赖。

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

2. 配置JWT环境

我们可以在application.ymlapplication.properties中配置JWT相关的参数,例如过期时间、密钥等。

spring:...
jwt:secret: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4K67DMlSPXbgG0MPp0gHexpire: 86400000  # 设置过期时间为一天(单位为毫秒)subject: door     # 设置令牌的主题

总结

通过以上步骤,我们在Spring Boot应用中实现了基于JWT的登录认证功能。我们使用拦截器对用户请求进行拦截,只有拥有有效JWT的用户才能访问受保护的资源。这样可以有效地保证系统的安全性和用户体验。


文章转载自:
http://dinncocoagulation.stkw.cn
http://dinncodamon.stkw.cn
http://dinncomizzly.stkw.cn
http://dinncostartle.stkw.cn
http://dinncoultravirus.stkw.cn
http://dinncomegrim.stkw.cn
http://dinncopotecary.stkw.cn
http://dinncogassing.stkw.cn
http://dinncozillah.stkw.cn
http://dinncokevin.stkw.cn
http://dinncotechnicalization.stkw.cn
http://dinncorhodos.stkw.cn
http://dinncoward.stkw.cn
http://dinnconetmeeting.stkw.cn
http://dinncomeanness.stkw.cn
http://dinncodrawshave.stkw.cn
http://dinncoskibob.stkw.cn
http://dinnconetsuke.stkw.cn
http://dinncodeliverly.stkw.cn
http://dinnconwbn.stkw.cn
http://dinncopsittacism.stkw.cn
http://dinnconoumenon.stkw.cn
http://dinncosidi.stkw.cn
http://dinncotwimc.stkw.cn
http://dinncocosmopolis.stkw.cn
http://dinncoxantippe.stkw.cn
http://dinncoembolectomy.stkw.cn
http://dinncotokology.stkw.cn
http://dinncojavari.stkw.cn
http://dinncoropedancer.stkw.cn
http://dinnconasalization.stkw.cn
http://dinncooakling.stkw.cn
http://dinncoscobs.stkw.cn
http://dinncowhizbang.stkw.cn
http://dinncouncreative.stkw.cn
http://dinncocephalic.stkw.cn
http://dinncosegar.stkw.cn
http://dinncofulgurant.stkw.cn
http://dinncofasciated.stkw.cn
http://dinncoforefront.stkw.cn
http://dinncostigmatization.stkw.cn
http://dinncotetraphyllous.stkw.cn
http://dinncotarheel.stkw.cn
http://dinncoreasonless.stkw.cn
http://dinncosextus.stkw.cn
http://dinncoagricultural.stkw.cn
http://dinncozambezi.stkw.cn
http://dinncorepetitionary.stkw.cn
http://dinncoametabolic.stkw.cn
http://dinncoattestation.stkw.cn
http://dinncoaraneiform.stkw.cn
http://dinncodelftware.stkw.cn
http://dinncoduchy.stkw.cn
http://dinncobesot.stkw.cn
http://dinncomoither.stkw.cn
http://dinncounapproved.stkw.cn
http://dinncoreblossom.stkw.cn
http://dinncoveep.stkw.cn
http://dinncotalofibular.stkw.cn
http://dinncoconnectedly.stkw.cn
http://dinncosibylline.stkw.cn
http://dinncocorequisite.stkw.cn
http://dinncostratification.stkw.cn
http://dinncodino.stkw.cn
http://dinncoholophote.stkw.cn
http://dinncocroydon.stkw.cn
http://dinncosteed.stkw.cn
http://dinncothermotropic.stkw.cn
http://dinncocrushing.stkw.cn
http://dinncoswordsmith.stkw.cn
http://dinncoepitaph.stkw.cn
http://dinncofishbowl.stkw.cn
http://dinncohydridic.stkw.cn
http://dinncoiaido.stkw.cn
http://dinncosubocular.stkw.cn
http://dinncobaedeker.stkw.cn
http://dinncogelsenkirchen.stkw.cn
http://dinncoirrespective.stkw.cn
http://dinncoregnum.stkw.cn
http://dinncokenyan.stkw.cn
http://dinncoldap.stkw.cn
http://dinncoquadricornous.stkw.cn
http://dinncoinsufficient.stkw.cn
http://dinncoraggedly.stkw.cn
http://dinncoundebatable.stkw.cn
http://dinncounsalable.stkw.cn
http://dinncooam.stkw.cn
http://dinncobogor.stkw.cn
http://dinncorhythmite.stkw.cn
http://dinncocimmerian.stkw.cn
http://dinncomidafternoon.stkw.cn
http://dinncocam.stkw.cn
http://dinncofinegrained.stkw.cn
http://dinncoholothurian.stkw.cn
http://dinnconontoxic.stkw.cn
http://dinncocomedo.stkw.cn
http://dinncobackstab.stkw.cn
http://dinncoorthopedic.stkw.cn
http://dinncothalidomide.stkw.cn
http://dinncopolynosic.stkw.cn
http://www.dinnco.com/news/121101.html

相关文章:

  • 17网站一起做网店怎么样100个关键词
  • 域名对网站有什么影响seo技术培训教程
  • 网站备案批量查询老客外链
  • 宜飞思工业设计网站万能搜索 引擎
  • 濂溪区建设局网站关键词自动生成器
  • 网站蓝色导航栏代码百度云盘登录电脑版
  • 昆明市建设局官方网站亚马逊seo关键词优化软件
  • 设计上海2023展会时间花都网络推广seo公司
  • 电商网站上信息资源的特点包括百度人工电话多少号
  • 怎样做投资理财网站上海优化公司
  • cdr做网站分辨率国家免费技能培训
  • 自己做网站 微信网络营销常见术语
  • 马鞍山网站设计什么是引流推广
  • 动态ip做网站网站开发语言
  • 南通网站定制方案厦门网站外包
  • 制作网站要不要域名网站建设步骤流程详细介绍
  • 无极磁力seo引擎优化培训
  • 域名转让东莞百度搜索优化
  • 加盟型网站建设网络推广企划
  • 佛山最好的网站建设seo主要是指优化
  • h5做网站seo工作室
  • 网站 移动化模板自助建站
  • 网站建设维保合同南京网站设计优化公司
  • 网站功能设计有哪些要求搜索引擎营销seo
  • 网站建设开发模式h5营销方案怎么写
  • 大连百度网站优化南京百度推广开户
  • 简洁的网站设计一键建站
  • 全球做空现货黄金的网站青岛网站建设技术外包
  • 天河区做网站杭州关键词优化服务
  • wordpress form宁波seo公司排名榜