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

网络网站建设价格怎么做网站一张图

网络网站建设价格,怎么做网站一张图,遂宁网站设计,企业手机网站建设定制一 项目架构1.1 今日指数技术选型【1】前端技术【2】后端技术栈【3】整体概览1.2 核心业务介绍【1】业务结构预览【2】业务结构预览1.定时任务调度服务XXL-JOB通过RestTemplate多线程动态拉去股票接口数据#xff0c;刷入数据库#xff1b; 2.国内指数服务 3.板块指数服务 4.…一 项目架构1.1 今日指数技术选型【1】前端技术【2】后端技术栈【3】整体概览1.2 核心业务介绍【1】业务结构预览【2】业务结构预览1.定时任务调度服务XXL-JOB通过RestTemplate多线程动态拉去股票接口数据刷入数据库 2.国内指数服务 3.板块指数服务 4.涨幅榜展示功能 5.涨停跌停数展示功能 6.成交量对比展示功能 7.个股涨停服务展示功能 8.个股详情展示功能包含分时行情、日k线、周K线图等 9.个股描述服务 10.报表导出服务二 后端开发环境搭建开发工具版本要求2.1 数据库环境搭建【1】表结构介绍注意事项后期股票相关的数据量非常庞大表与表之间尽量不要构建外键约束提升数据库性能同时也为后期分库分表准备【2】数据导入因为我边的CentOS7连接不上 所以在这里面 用本地windoms运行数据库可视化选用 SQLyog - 64 bit mysql用的是5.7.242.2后端工程搭建【1】构建stock_parent父工程创建stock_parent maven工程接下来 复制以下maven到pom.xml packagingpom/packagingproperties!--工程构建的代码格式为UTF-8--project.build.sourceEncodingUTF-8/project.build.sourceEncoding!--编译--maven.compiler.encodingUTF-8/maven.compiler.encoding!--编译原文件--maven.compiler.source8/maven.compiler.source!--生成的编译目录--maven.compiler.target8/maven.compiler.target!--打包时跳过测试--maven.test.skiptrue/maven.test.skip!--mybatis整合spring-boot场景依赖--mybatis-spring-boot-starter.version2.1.4/mybatis-spring-boot-starter.version!--pagehelper版本--pagehelper-spring-boot-starter.version1.2.12/pagehelper-spring-boot-starter.version!--mysql驱动包--mysql-driver.version5.1.49/mysql-driver.version!--fastjson工具--fastjson.version1.2.71/fastjson.version!--依赖的版本--springfox-swagger2.version2.9.2/springfox-swagger2.version!--druid的场景依赖--druid-spring-boot-starter.version1.1.22/druid-spring-boot-starter.version!--druid的核心依赖--druid-core-version1.2.8/druid-core-version!--分库分表对应的版本--sharding-jdbc.version4.0.0-RC1/sharding-jdbc.version!--jwt--jjwt.version0.9.1/jjwt.version!--easyExcel 报表导入导出--easyExcel.version3.0.4/easyExcel.version!--xxl-job--xxl-job-core.version2.3.0/xxl-job-core.version!--spring-boot版本--spring-boot.version2.5.3/spring-boot.version!--日期小插件--joda-time.version2.10.5/joda-time.version!--google.guava--google.guava.version30.0-jre/google.guava.version/properties!--定义依赖版本锁定--dependencyManagementdependencies!--引入springboot依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion${spring-boot.version}/versiontypepom/typescopeimport/scope/dependency!--引入mybatis场景依赖--dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion${mybatis-spring-boot-starter.version}/version/dependency!--pageHelper场景依赖--dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper-spring-boot-starter/artifactIdversion${pagehelper-spring-boot-starter.version}/version/dependency!--mysql驱动包--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql-driver.version}/version/dependency!--shardingjdbc分库分表--dependencygroupIdorg.apache.shardingsphere/groupIdartifactIdsharding-jdbc-spring-boot-starter/artifactIdversion${sharding-jdbc.version}/version/dependency!--json工具包--dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion${fastjson.version}/version/dependency!--druid-boot依赖--dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion${druid-spring-boot-starter.version}/version/dependency!--druid core--dependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion${druid-core-version}/version/dependency!--swagger文档依赖--dependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger2/artifactIdversion${springfox-swagger2.version}/version/dependencydependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger-ui/artifactIdversion${springfox-swagger2.version}/version/dependency!--引入jwt依赖--dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion${jjwt.version}/version/dependency!-- 导出 excel --dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion${easyExcel.version}/version/dependency!--xxl-job定义任务框架支持--dependencygroupIdcom.xuxueli/groupIdartifactIdxxl-job-core/artifactIdversion${xxl-job-core.version}/version/dependency!--时间小工具--dependencygroupIdjoda-time/groupIdartifactIdjoda-time/artifactIdversion${joda-time.version}/version/dependency!--引入google的工具集--dependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion${google.guava.version}/version/dependency/dependencies/dependencyManagementbuildpluginManagementplugins!--Springboot核心插件--plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion${spring-boot.version}/versionconfigurationexcludes!--插件运行时排除依赖--excludegroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactId/exclude/excludes/configuration/plugin!--打包跳过test --plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactIdconfigurationskip${maven.test.skip}/skip/configuration/plugin/plugins/pluginManagement/build 注意事项1.打包方式pom 2.通过dependencyManagement、pluginManagement锁定开发中的依赖和插件的版本;接下来 删除父工程的src 【2】构建stock_backend基础工程创建stock_parent的maven子工程stock_backend:【2.1】引入依赖stock_backend工程被stock_parent父工程聚合pom配置如下packagingjar/packagingartifactIdstock_backend/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/propertiesdependencies!-- 基本依赖 web的场景依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--日志--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency!--mysql--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependency!--单元测试--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!--lombok--dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency!--mybatis整合spring-boot--dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactId/dependency!--分页--dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper-spring-boot-starter/artifactId/dependency!--druid--dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactId/dependency!--配置提示--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional/dependency!--时间小工具--dependencygroupIdjoda-time/groupIdartifactIdjoda-time/artifactId/dependency/dependenciesbuild!--打包名称--finalName${project.artifactId}/finalNamepluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin!-- 打包跳过test --plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactId/plugin/plugins/build 【2.2】创建公共包结构找到资料中的公共包结构复制com进入到项目的物理路径IntelliJ IDEA 2020.1.3 x64不同的idea进行项目物理环境的选项不同把刚才复制过来的com复制到main/java下面这样就能得到目录结构里面为空目录 这样做的目的是不能一次次创建目录结构【2.3】快速生成yml和main启动类的插件JBL SpringbootAppGen安装使用生成效果【2.4】配置yml # web定义 server:port: 8081 #指定当前端口号spring:# 配置mysql数据源datasource:druid:username: rootpassword: rooturl: jdbc:mysql://127.0.0.1:3306/stock_db?useUnicodetruecharacterEncodingUTF-8allowMultiQueriestrueuseSSLfalseserverTimezoneAsia/Shanghaidriver-class-name: com.mysql.jdbc.Driver# 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法或者第一次 getConnection 时initialSize: 6# 最小连接池数量minIdle: 2# 最大连接池数量maxActive: 20# 获取连接时最大等待时间单位毫秒。配置了 maxWait 之后缺省启用公平锁# 并发效率会有所下降如果需要可以通过配置 useUnfairLock 属性为 true 使用非公平锁。maxWait: 60000# 配置间隔多久才进行一次检测检测需要关闭的空闲连接单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一个连接在池中最小生存的时间单位是毫秒minEvictableIdleTimeMillis: 300000# 用来检测连接是否有效的 sql 因数据库方言而差, 例如 oracle 应该写成 SELECT 1 FROM DUALvalidationQuery: SELECT 1 FROM DUAL# 建议配置为 true不影响性能并且保证安全性。申请连接的时候检测# 如果空闲时间大于 timeBetweenEvictionRunsMillis执行 validationQuery 检测连接是否有效。testWhileIdle: true# 申请连接时执行 validationQuery 检测连接是否有效做了这个配置会降低性能。testOnBorrow: false# 归还连接时执行 validationQuery 检测连接是否有效做了这个配置会降低性能。testOnReturn: false# 是否自动回收超时连接poolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 20# 配置监控统计拦截的filters去掉后监控界面sql无法统计wall用于防火墙filters: stat,wall# 通过connectProperties属性来打开mergeSql功能慢SQL记录connectionProperties: druid.stat.mergeSqltrue;druid.stat.slowSqlMillis5000# 配置mybatis mybatis:type-aliases-package: com.itheima.stock.pojo #指定的包下类名取别名mapper-locations: classpath:mapper/*.xmlconfiguration:map-underscore-to-camel-case: true #开启驼峰映射cache-enabled: false #使全局的映射器启用或禁用缓存。lazy-loading-enabled: false #全局启用或禁用延迟加载。当禁用时所有关联对象都会即时加载。aggressive-lazy-loading: true #当启用时有延迟加载属性的对象在被调用时将会完全加载任意属性。否则每种属性将会按需要加载。# pagehelper配置 pagehelper:helper-dialect: mysql #指定分页数据库类型方言reasonable: true #合理查询超过最大也则查询最后一页support-methods-arguments: true # 支持通过Mapper接口参数来传递分页参数默认falseparams: pacountcountSql # POJO或者Map中发现了countSql属性就会作为count参数使用returnPageInfo: check # always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page因为上面配置了少了一个mapper 所以我们现 在创建这个包注意第一点url: jdbc:mysql://127.0.0.1:3306/stock_db?useUnicodetruecharacterEncodingUTF-8allowMultiQueriestrueuseSSLfalseserverTimezoneAsia/Shanghai这里面的url 如果是连接的是linux的 刚要写成Linux上的Ip 如果连接的是本地win则url 刚要写成jdbc:mysql:///数据库名称或jdbc:mysql://localhost:3306/数据库名称jdbc:mysql://127.0.0.1:3306/数据库名称第二点 本项目用到的mysql为5.7 不是8.0 所以把driver-class-name: com.mysql.cj.jdbc.Driver 把cj删除补充知识driver-class-name: com.mysql.cj.jdbc.Driver mysql8.0 driver-class-name: com.mysql.jdbc.Driver mysql5.7第三点 接口扫描IntelliJ IDEA 2020.1.3 x64版本复制路径写法视频中的idea版本复制路径写法然后把复制过来的路径给放在下图所示【2.5】定义main启动类package com.itheima.stock;import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication MapperScan(com.itheima.stock.mapper) public class StockApp {public static void main(String[] args) {SpringApplication.run(StockApp.class, args);} }【2.6】定义web测试接口package com.itheima.stock.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/api) public class UserController {GetMapping(/test)public String getName(){return itheima;}}启动注意这里面启动时 要注意你连接的mysql是linux的还是本地的 要注意他们的账户和密码否正确启动成功在浏览器上测试能够获取到在做接口调试的时候 在这里面建议用postman 因为用浏览器只能用到git演示使用课程资料中的------股票API接口测试.json至此工程基础环境搭建完毕2.3 快速构建mybatis业务开发环境【1】安装插件mybatisX工具我们可借助mybatisX工具生成基础代码步骤如下第一步通过idea自带的database组件连接数据库全选11张表 点击第一张表 按住Shist 在点击最后一张表右击第二步配置pojo实体类选项【2】集成mybatis的工程结构【3】环境整体测试目的我们通过一个简单的web接口访问数据库验证工程搭建情况 接口功能说明:查询所有上市公司主营业务数据 接口url:/api/quot/stock/business/all【3.1】定义mapper接口方法 StockBusinessMapper接口和xml定义查询所有股票业务信息的接口方法 ListStockBusiness findall(); select idfindall resultMapBaseResultMapselectinclude refidBase_Column_List /from stock_business/select【3.2】定义服务接口及实现定义服务接口package com.itheima.stock.service;import com.itheima.stock.pojo.StockBusiness; import java.util.List;/*定义股票服务接口*/ public interface StockService {/*查询所有主营业务信息*/ListStockBusiness findAll();} 定义服务接口实现AltEnter package com.itheima.stock.service.impl;import com.itheima.stock.mapper.StockBusinessMapper; import com.itheima.stock.pojo.StockBusiness; import com.itheima.stock.service.StockService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;Service(stockService) public class StockServiceImpl implements StockService {Autowiredprivate StockBusinessMapper stockBusinessMapper;Overridepublic ListStockBusiness findAll() {return stockBusinessMapper.findAll();} } 【3.3】定义web访问接口package com.itheima.stock.controller;import com.itheima.stock.pojo.StockBusiness; import com.itheima.stock.service.StockService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.List;RestController RequestMapping(/api/quot) public class StockController {Autowiredprivate StockService stockService;GetMapping(/stock/business/all)public ListStockBusiness findAllBusiness(){return stockService.findAll();}} 【3.4】启动项目测试成功启动至此后台基本开发环境构建完毕3.前端开发环境搭建3.1 前端环境准备【1】node安装前端node版本详见资料【2】vs导入前端代码资料day01\资料\前端资料\stock_front_admin使用vscode打开工程效果如下【3】前端工程启动npm run dev这里面是8080 但是我们后端是8081 所以这里面要注意一下注意事项如果启动报错重新npm install 或者cnpm install【4】页面效果3.2 前后端分离跨域问题在前面的知识中我们已经了解到项目进行前后端分离后存在跨域问题只需在前端进行简单配置即可解决该问题【1】前后端跨域配置在stock_front_admin\src\settings.js文件下配置跨域 devServer: {port: 8080,host: 127.0.0.1,// 开发hostopen:true,// 是否启动时打开浏览器disableHostCheck: true, // 映射外网时需要设置为true/*** 域名他将会基于 window.location来链接服务器需要使用public配置* dev-server被代理到nginx中配置的 itheima.com*/public: 127.0.0.1:8080,//itheima.compublicPath:/,compress:true,overlay: {// 是否在浏览器全屏显示错误与警告warnings: false,errors:true},proxy: {// 跨域请求配置/api: {secure: false,// 关闭安全检测默认请求 https//target: http://192.168.188.131:8081,target: http://localhost:8081,changeOrigin: true,// pathRewrite: {^/api : },}},},【2】前后端交互数据格式 前端与后端使用json格式进行交互。4.登录功能实现4.1 需求分析1页面原型效果2相关的表结构sys_user表如下3访问接口定义 请求接口/api/login 请求方式POST 请求数据示例{username:zhangsan,//用户名password:666,//密码code:1234 //校验码} 响应数据{code: 1,//成功1 失败0data: {id:1237365636208922624,username:zhangsan,nickName:xiaozhang,phone:1886702304}} 4)封装请求和响应vo请求vo封装package com.itheima.stock.vo.req;import lombok.Data;/*用户登录请求vo*/Data public class LoginReqVo {/*** 用户名*/private String username;/*** 密码*/private String password;/*** 前端发送的验证码*/private String code;} }响应vo把资料中的LoginRespVo复制到idea中package com.itheima.stock.vo.resp;import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor;/*** author by itheima* Date 2021/12/24* Description 登录后响应前端的vo*/ Data NoArgsConstructor AllArgsConstructor Builder public class LoginRespVo {/*** 用户ID*/private String id;/*** 电话*/private String phone;/*** 用户名*/private String username;/*** 昵称*/private String nickName;}定义公共响应vo把资料中的R复制过来package com.itheima.stock.vo.resp;import com.fasterxml.jackson.annotation.JsonInclude;import java.io.Serializable;/*** 返回数据类* param T*/ //保证序列化json的时候,如果是null的对象,key也会消失 JsonInclude(JsonInclude.Include.NON_NULL) public class RT implements Serializable {private static final long serialVersionUID 7735505903525411467L;// 成功值private static final int SUCCESS_CODE 1;// 失败值private static final int ERROR_CODE 0;//状态码private int code;//消息private String msg;//返回数据private T data;private R(int code){this.code code;}private R(int code, T data){this.code code;this.data data;}private R(int code, String msg){this.code code;this.msg msg;}private R(int code, String msg, T data){this.code code;this.msg msg;this.data data;}public static T RT ok(){return new RT(SUCCESS_CODE,success);}public static T RT ok(String msg){return new RT(SUCCESS_CODE,msg);}public static T RT ok(T data){return new RT(SUCCESS_CODE,data);}public static T RT ok(String msg, T data){return new RT(SUCCESS_CODE,msg,data);}public static T RT error(){return new RT(ERROR_CODE,error);}public static T RT error(String msg){return new RT(ERROR_CODE,msg);}public static T RT error(int code, String msg){return new RT(code,msg);}public int getCode(){return code;}public String getMsg(){return msg;}public T getData(){return data;} }定义响应状态枚举把资料中的ResponseCode复制到idea中package com.itheima.stock.common.enums;/*** author by itheima* Date 2021/12/21* Description*/ public enum ResponseCode{ERROR(0,操作失败),SUCCESS(1,操作成功),DATA_ERROR(0,参数异常),NO_RESPONSE_DATA(0,无响应数据),SYSTEM_VERIFY_CODE_NOT_EMPTY(0,验证码不能为空),SYSTEM_VERIFY_CODE_ERROR(0,验证码错误),SYSTEM_USERNAME_NOT_EMPTY(0,账号不能为空),SYSTEM_USERNAME_NOT_EXISTS(0,账号不存在),SYSTEM_USERNAME_EXPIRED(0,账户过期),SYSTEM_USERNAME_LOCKED(0,账户被锁),SYSTEM_USERNAME_DISABLED(0,账户被禁用),SYSTEM_PASSWORD_ERROR(0,账号或密码错误),SYSTEM_PASSWORD_EXPIRED(0,密码过期),SYSTEM_USERNAME_OFFLINE(0,已下线请重新登录),SYSTEM_ERROR(0,系统异常请稍后再试),ACCOUNT_EXISTS_ERROR(0,该账号已存在),TOKEN_ERROR(2,用户未登录请先登录),NOT_PERMISSION(3,没有权限访问该资源),TOKEN_NOT_NULL(-1,token 不能为空),TOKEN_NO_AVAIL(-1,token无效或过期),TOKEN_PAST_DUE(-1,登录失效,请重新登录),TOKEN_EXISTS(-1,账号异地登录你已被迫退出),OPERATION_MENU_PERMISSION_CATALOG_ERROR(0,操作后的菜单类型是目录所属菜单必须为默认顶级菜单或者目录),OPERATION_MENU_PERMISSION_MENU_ERROR(0,操作后的菜单类型是菜单所属菜单必须为目录类型),OPERATION_MENU_PERMISSION_BTN_ERROR(0,操作后的菜单类型是按钮所属菜单必须为菜单类型),OPERATION_MENU_PERMISSION_URL_NOT_NULL(0,菜单权限的url不能为空),OPERATION_MENU_PERMISSION_URL_PERMS_NULL(0,菜单权限的标识符不能为空),OPERATION_MENU_PERMISSION_URL_METHOD_NULL(0,菜单权限的请求方式不能为空),OPERATION_MENU_PERMISSION_URL_CODE_NULL(0,菜单权限的按钮标识不能为空),OPERATION_MENU_PERMISSION_UPDATE(0,操作的菜单权限存在子集关联不允许变更),ROLE_PERMISSION_RELATION(0, 该菜单权限存在子集关联不允许删除),OLD_PASSWORD_ERROR(0,旧密码不匹配);private int code;private String message;ResponseCode(int code, String message) {this.code code;this.message message;}public int getCode() {return 0;}public String getMessage() {return null;} }说明上述的vo对象直接在今日指数\day01\资料\vo导入即可4.2 登录功能开发实现stock_backend导入依赖资源!--apache工具包-- dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactId /dependency !--密码加密和校验工具包-- dependencygroupIdorg.springframework.security/groupIdartifactIdspring-security-crypto/artifactId /dependency !--工具包-- dependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactId /dependency配置密码加密服务package com.itheima.stock.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;/*定义公共配置类*/Configuration public class CommonConfig {/*** 密码加密器 定义密码加密器和解密器 bean* BCryptPasswordEncoder方法采用SHA-256对密码进行加密* return*/Beanpublic PasswordEncoder passwordEncoder(){return new BCryptPasswordEncoder();}} 密码加密测试登录接口方法定义package com.itheima.stock.controller; import com.itheima.stock.vo.req.LoginReqVo; import com.itheima.stock.vo.resp.LoginRespVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;RestController RequestMapping(/api) public class UserController {/* GetMapping(/test)public String getName(){return itheima;}*/Autowiredprivate UserService userService;/*** 用户登录功能实现* param vo* return*/PostMapping(/login)public RLoginRespVo login(RequestBody LoginReqVo vo){return userService.login(vo);}} 4定义登录服务接口和实现服务接口AltEnter 选择以下图上所示接口服务实现AltEnterpackage com.itheima.stock.service.impl; import com.google.common.base.Strings; import com.itheima.stock.mapper.SysUserMapper; import com.itheima.stock.pojo.SysUser; import com.itheima.stock.service.UserService; import com.itheima.stock.vo.req.LoginReqVo; import com.itheima.stock.vo.resp.LoginRespVo; import com.itheima.stock.vo.resp.R; import com.itheima.stock.vo.resp.ResponseCode; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; Service(userService) public class UserServiceImpl implements UserService {Autowiredprivate SysUserMapper sysUserMapper;Autowiredprivate PasswordEncoder passwordEncoder;Overridepublic RLoginRespVo login(LoginReqVo vo) {//1.判断vo是否存在 或者用户名是否存在或都密码是否存在if (vo null || Strings.isNullOrEmpty(vo.getUsername()) || Strings.isNullOrEmpty(vo.getPassword())) {return R.error(ResponseCode.DATA_ERROR.getMessage());}//2. 根据用户名判断用户是否存在SysUser userInfo sysUserMapper.findUserInfoByUserName(vo.getUsername());if (userInfo null) {return R.error(ResponseCode.DATA_ERROR.getMessage());}//3.判断密码不匹配if (!passwordEncoder.matches(vo.getPassword(), userInfo.getPassword())) {return R.error(ResponseCode.SYSTEM_PASSWORD_ERROR.getMessage());}//4.属性赋值 两个类之间属性名称一致LoginRespVo respVo new LoginRespVo();BeanUtils.copyProperties(userInfo,respVo);return R.ok(respVo);}}测试package com.itheima.stock;import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.crypto.password.PasswordEncoder;SpringBootTest public class TestPasswordEncoder {Autowiredprivate PasswordEncoder passwordEncoder;Testpublic void test1(){String pwd 123456;//加密String enPwd1 passwordEncoder.encode(pwd);String enPwd2 passwordEncoder.encode(pwd);System.out.println(enPwd1);System.out.println(enPwd2);//验证密码是否正确boolean r1 passwordEncoder.matches(pwd, enPwd1);System.out.println(r1);boolean r2 passwordEncoder.matches(pwd, enPwd2);System.out.println(r2);}} 5)Postman测试
http://www.eeditor.cn/news/125569/

相关文章:

  • 做网站的价格 外贸wordpress主题 二次元
  • 如何制作一个自己的网站?在墙外的优质网站
  • 网站专题制作原则济南seo网站优化
  • 营销型单页面网站网站建设运营公众号运营合同
  • 用ssh做的简单网站泰安专业网站建设公司
  • 建设厅公积金中心网站自己做的网站别人怎么上网找到
  • 企业网站色彩主要的cms系统有哪些
  • 做app和网站哪个比较好用有了域名如何做网站
  • 辽阳网站建设企业木疙瘩h5官网
  • 爱站网关键词查询网站品牌网站建设9小蝌蚪9a
  • 专注合肥网站建设徐州网站建设电话
  • 备案网站负责人网站排名优化怎么样
  • 广州网站建设培训wordpress 导出excel
  • 福州专业网站建设服务商公众号怎么开通
  • 嘉定网站公司网站正在建设页面
  • 歪歪小站 wordpress必应网站首页的图片怎么做的
  • 怎么可以找到做公益的网站404页面模板
  • 企业网站内容运营wordpress一键搭建脚本
  • 最火爆的国际贸易网站母婴行业网站建设
  • 建设部证书查询官方网站免费拥有wordpress
  • android电影网站开发电商培训机构排名
  • 淄博做网站seowordpress循环调用最新文章
  • 怎么给网站做搜索功能网页设计与制作的三个阶段
  • 腾讯风铃怎么做网站自己服务器做网站如何备案
  • 做门图网站网页访问自动跳转中
  • 游戏网站网页模板html网站推广软件排名
  • 外贸电商平台哪个网站最好宁波专业建网站外包
  • 有趣的网站初音全屋定制十大名牌谁最好
  • 有免费做门户网站吗门户网站广告的类型
  • 线上教学网站dz网站首页html代码在哪