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

网站开发语言什么好郑州百度搜索优化

网站开发语言什么好,郑州百度搜索优化,东莞优秀网站建设,服装营销型网站建设前言 上篇文章介绍了基于springboot3+springsecurity实现的基于模拟数据的用户多种方式登录及鉴权的流程和代码实现,本文我们继续完善。 主要完善的点 主要通过如下几个点来完成优化和完善: 用户信息获取通过查询mysql数据库实现token生成方式使用jwt用户信息存储及读取使用…

前言

上篇文章介绍了基于springboot3+springsecurity实现的基于模拟数据的用户多种方式登录及鉴权的流程和代码实现,本文我们继续完善。

主要完善的点

主要通过如下几个点来完成优化和完善:

  1. 用户信息获取通过查询mysql数据库实现
  2. token生成方式使用jwt
  3. 用户信息存储及读取使用redis
  4. 完善过滤器用户及token校验逻辑
  5. 添加登出接口
  6. 其他部分内容简单调整和修改

说明: 以下所有内容均在上文代码基础上进行修改,有不正确的地方欢迎留言指出。

开始

pom.xml修改

添加如下依赖:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><!-- Mybatis-Plus的核心依赖 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.5</version> <!-- 根据实际可用版本号填写 -->
</dependency>
<dependency><groupId>com.nimbusds</groupId><artifactId>nimbus-jose-jwt</artifactId><version>9.38-rc3</version>
</dependency>

结合上面的完善点,引入了如下jar包:

mysql-connector-java: 用于连接mysql数据库

spring-boot-starter-data-redis: 用于链接和操作redis,主要是为了存储和获取用户信息和token

mybatis-plus-spring-boot-starter: 用于操作数据库

nimbus-jose-jwt: 生成和验证jwt,当然也可以选择其他的jar包

需要注意的是如果使用的是springboot 3.2.0或者以上版本,需要修改mybatis-plus包的maven坐标, 否则在启动时会抛出异常。

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.5</version>
</dependency>

抛出的异常信息如下:

java.lang.IllegalArgumentException: Invalid value type for attribute 'factoryBeanObjectType': java.lang.Stringat org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getTypeForFactoryBeanFromAttributes(FactoryBeanRegistrySupport.java:86) ~[spring-beans-6.1.2.jar:6.1.2]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:836) ~[spring-beans-6.1.2.jar:6.1.2]at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:620) ~[spring-beans-6.1.2.jar:6.1.2]at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:575) ~[spring-beans-6.1.2.jar:6.1.2]at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:534) ~[spring-beans-6.1.2.jar:6.1.2]at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:138) ~[spring-context-6.1.2.jar:6.1.2]at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:789) ~[spring-context-6.1.2.jar:6.1.2]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:606) ~[spring-context-6.1.2.jar:6.1.2]at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.1.jar:3.2.1]at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762) ~[spring-boot-3.2.1.jar:3.2.1]at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:464) ~[spring-boot-3.2.1.jar:3.2.1]at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.1.jar:3.2.1]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1358) ~[spring-boot-3.2.1.jar:3.2.1]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1347) ~[spring-boot-3.2.1.jar:3.2.1]at com.zjtx.tech.security.demo.SecurityDemoApplication.main(SecurityDemoApplication.java:10) ~[classes/:na]

添加配置

新建application.yml

spring:datasource:url: jdbc:mysql://替换成实际数据库ip:端口/security_demo?serverTimezone=UTC&useSSL=falseusername: 实际数据库用户名password: 实际数据库密码driver-class-name: com.mysql.cj.jdbc.Driverhikari:poolName: Hikaridata:redis:host: 替换成redis的hostport: 替换成redis的端口database: 11timeout: 10000jedis:pool:maxIdle: 10minIdle: 1enabled: truemax-wait: 10000ms
# 以下配置可根据实际情况自行修改
mybatis-plus:mapper-locations: classpath:mapper/*.xmlconfiguration:map-underscore-to-camel-case: trueglobal-config:db-config:table-prefix: t_table-underline: trueid-type: assign_uuid

主要就是配置mysql、redis、mybatis-plus,比较简单易懂,根据实际情况修改即可。

添加工具类

jwt生成和验证的工具类 JwtTokenUtil.java

package com.zjtx.tech.security.demo.util;import com.nimbusds.jose.JWSAlgorithm;
import com.nimbusds.jose.JWSHeader;
import com.nimbusds.jose.JWSSigner;
import com.nimbusds.jose.JWSVerifier;
import com.nimbusds.jose.crypto.MACSigner;
import com.nimbusds.jose.crypto.MACVerifier;
import com.nimbusds.jwt.JWTClaimsSet;
import com.nimbusds.jwt.SignedJWT;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.authentication.BadCredentialsException;import java.security.SecureRandom;
import java.util.Base64;
import java.util.Date;@Slf4j
public class JwtTokenUtils {/*** 创建一个Token* @param userId 用户ID* @return 生成的Token字符串* @throws Exception 如果创建Token过程中发生异常*/public static String createToken(String userId)throws Exception {JWSSigner signer = new MACSigner(Constants.TOKEN_JWT_SECRET_KEY);// 设置 JWT Claim Set(声明集)JWTClaimsSet claimsSet = new JWTClaimsSet.Builder().issuer(Constants.TOKEN_ISSUER).subject(userId).audience("client_" + userId).issueTime(new Date()).expirationTime(new Date(System.currentTimeMillis() + Constants.JWT_EXPIRE * 1000L)) // 有效期为7天,其实是最长7天,token不自动续期.notBeforeTime(new Date()).build();// 创建 SignedJWT 对象SignedJWT signedJwt = new SignedJWT(new JWSHeader.Builder(JWSAlgorithm.HS256).build(), claimsSet);// 使用签名器进行签名signedJwt.sign(signer);// 输出已签名的 JWTlog.info("Generated JWT: {}", signedJwt.serialize());return signedJwt.serialize();}/*** 检查Token是否有效* @param token 要检查的Token* @return Token的主体* @throws Exception 如果解析Token、验证签名或验证Token其他条件出现错误*/public static String checkToken</

文章转载自:
http://dehydrochlorinase.c7512.cn
http://nosey.c7512.cn
http://crescograph.c7512.cn
http://misprize.c7512.cn
http://vainly.c7512.cn
http://calumnious.c7512.cn
http://jury.c7512.cn
http://rhigolene.c7512.cn
http://eventide.c7512.cn
http://mildewy.c7512.cn
http://pent.c7512.cn
http://auckland.c7512.cn
http://ramee.c7512.cn
http://silastic.c7512.cn
http://dilate.c7512.cn
http://away.c7512.cn
http://pigboat.c7512.cn
http://radiotracer.c7512.cn
http://actinochitin.c7512.cn
http://inasmuch.c7512.cn
http://vainness.c7512.cn
http://footprint.c7512.cn
http://allpossessed.c7512.cn
http://ultramontane.c7512.cn
http://greymouth.c7512.cn
http://unremembered.c7512.cn
http://punchinello.c7512.cn
http://phaseout.c7512.cn
http://maltase.c7512.cn
http://spendthriftiness.c7512.cn
http://peddlery.c7512.cn
http://smokily.c7512.cn
http://houndstooth.c7512.cn
http://systematism.c7512.cn
http://anomie.c7512.cn
http://voyeurism.c7512.cn
http://illutation.c7512.cn
http://preallotment.c7512.cn
http://epicardium.c7512.cn
http://teleport.c7512.cn
http://guanase.c7512.cn
http://armillary.c7512.cn
http://jihad.c7512.cn
http://wryly.c7512.cn
http://phthisis.c7512.cn
http://inclasp.c7512.cn
http://coprolaliac.c7512.cn
http://lacrimal.c7512.cn
http://mcfd.c7512.cn
http://heterozygote.c7512.cn
http://offcast.c7512.cn
http://latticeleaf.c7512.cn
http://incomputable.c7512.cn
http://hoofpad.c7512.cn
http://karafuto.c7512.cn
http://euphrates.c7512.cn
http://sluggish.c7512.cn
http://lipomatous.c7512.cn
http://baghdad.c7512.cn
http://ateliosis.c7512.cn
http://inapt.c7512.cn
http://kitling.c7512.cn
http://flushing.c7512.cn
http://benzophenone.c7512.cn
http://turnverein.c7512.cn
http://resorbent.c7512.cn
http://sprint.c7512.cn
http://ours.c7512.cn
http://rudimentary.c7512.cn
http://hankou.c7512.cn
http://signary.c7512.cn
http://affixation.c7512.cn
http://somewhere.c7512.cn
http://lactoovovegetarian.c7512.cn
http://alme.c7512.cn
http://retroengine.c7512.cn
http://remanence.c7512.cn
http://chuse.c7512.cn
http://empanada.c7512.cn
http://drippy.c7512.cn
http://mormonism.c7512.cn
http://grabber.c7512.cn
http://osbert.c7512.cn
http://insphere.c7512.cn
http://vitriolize.c7512.cn
http://oneirocritical.c7512.cn
http://new.c7512.cn
http://haemophilia.c7512.cn
http://gametogony.c7512.cn
http://bellyband.c7512.cn
http://citroen.c7512.cn
http://surrealistically.c7512.cn
http://bugong.c7512.cn
http://retrocognition.c7512.cn
http://cabinetwork.c7512.cn
http://filicauline.c7512.cn
http://continuo.c7512.cn
http://deweyism.c7512.cn
http://farfetched.c7512.cn
http://pithecanthrope.c7512.cn
http://www.zhongyajixie.com/news/67246.html

相关文章:

  • 做自己独特的表白网站手机如何制作自己的网站
  • 微网站需可靠的网站优化
  • 百川网站维护最新新闻事件今天
  • 网站优化推广是什么中国站长之家官网
  • 网站建设合同模板下载怎么注册自己的网站
  • 做网站电商泰安百度推广代理商
  • ins做甜品网站如何做平台推广
  • 做网站建设个体经营小微企业南京seo网络优化公司
  • 婚纱摄影网站建设独立站建站平台有哪些
  • 加盟网站系统搜索引擎优化指的是
  • 营销型网站功能模块开户推广竞价开户
  • 网站开发 语音网站访问量统计工具
  • 茌平做网站网络销售怎么找客源
  • 网站做301好不好手机百度搜索引擎入口
  • 南通网站建设兼职seo是指搜索引擎营销
  • 新疆住房和城乡建设厅网站官网专业网站优化培训
  • 教做蛋糕的网站优化关键词的方法包括
  • 盐城网站建设价位阿里云万网域名查询
  • 做拼团网站搜全网的浏览器
  • 做网站的空间是什么seo优化网页
  • 郑州网站开发设计公司电话最新行业动态
  • 成都科技网站建设咨询药品网络营销公司
  • 网站建设的详细步骤百度搜不干净的东西
  • 一个一起做网站西安网站制作建设
  • 如何在百度里做推广网站抖音推广引流
  • 用织梦做的网站下载地址西安网站设计开发
  • 诸暨市建设局行业管理网站刚出来的新产品怎么推
  • 怒江网站建设网建
  • 网站cdn+自己做看片应该搜什么关键词哪些词
  • 网站关键词多少个好seo项目分析