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

龙口做网站网站制作的基本流程

龙口做网站,网站制作的基本流程,企业网站开发开题报告,东莞做网站需要多少钱spring boot(学习笔记第十四课) Spring Security的密码加密,基于数据库认证 学习内容: Spring Security的密码加密基于数据库认证 1. Spring Security的密码加密 如果用户的密码保存在数据库中是以明文保存,对于公司的安全将是灾难性的&…

spring boot(学习笔记第十四课)

  • Spring Security的密码加密,基于数据库认证

学习内容:

  1. Spring Security的密码加密
  2. 基于数据库认证

1. Spring Security的密码加密

  1. 如果用户的密码保存在数据库中是以明文保存,对于公司的安全将是灾难性的,哪个公司也不会允许用户数据使用明文保存。这里练习使用加密之后的密码进行认证。
    注意,这样公司的数据库里面是没有用户的明文密码,即使数据库泄露,也不会暴漏用户的明文密码在这里插入图片描述
  2. 实现密码加密
    • 配置passwordEncoder
      @Bean
      PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder(10);
      }
      
    • 手动根据明文密码生成密文密码
      bcrypt转换工具
      注意,每次生成的密码都不一样,但是每个生成的都好用
      在这里插入图片描述
    • 使用生成的密文进行用户的创建。
       @BeanUserDetailsService userDetailsService() {InMemoryUserDetailsManager users =new InMemoryUserDetailsManager();users.createUser(User.withUsername("finlay_user").password("$2a$10$uwwZ5EyWbFnnw3JG53rqQ.VJUm/.Pl9Ko1CUP5Aqc2kuBr2Bx7bc.").roles("USER").build());
      
    • 再次进行认证。
      在这里插入图片描述

2. 基于数据库认证

以上练习了基于内存的认证,实际上,正式的系统开发都是使用数据库进行认证,在这里练习使用使用数据库的用户数据进行认证。这里使用postgresql

  1. 首先创建数据库需要的表
    • 创建USER
      CREATE TABLE "USER"(
      id int,
      username varchar(32),
      password varchar(255),
      enabled int,
      locked int,
      PRIMARY KEY(id)
      );
      
    • 创建ROLE
      CREATE TABLE "ROLE"(
      id int,
      name varchar(32),
      nameZh varchar(255),
      PRIMARY KEY(id)
      );
      
    • 创建USER_ROLE表(userrole的关系表)
      CREATE TABLE "USER_ROLE"(
      id int,
      uid int,
      rid int,
      PRIMARY KEY(id)
      );
      
    • 用户数据如下:
      • USER
        在这里插入图片描述
      • ROLE
        在这里插入图片描述
      • USER_ROLE
        在这里插入图片描述
      • USERROLE的关系
        			with uur as ( select* from"USER" u inner join "USER_ROLE" ur on u.id = ur.uid)select username,namezh,name as rolename from uur inner join "ROLE" r on uur.rid = r.id
        
        在这里插入图片描述
  2. 引入必要的依赖
    		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.9</version></dependency>
    
    这里repository使用mybatis,所以引入mybatis的依赖包。
  3. application.properties定义数据库连接信息。
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/springboot
    spring.datasource.username=finlay
    spring.datasource.password=123456
    
  4. 定义mybatisinterface,以及xml文件
    • 定义UserRole的实体类
      @Data
      public class Role {private Integer id;private String name;private String nameZh;
      }
      
      @Data
      public class User implements UserDetails {private Integer id;private String username;private String password;private Boolean enabled;private Boolean locked;private List<Role> roles;@Overridepublic Collection<? extends GrantedAuthority> getAuthorities() {List<SimpleGrantedAuthority> authorities = new ArrayList<>();for (Role role : roles) {authorities.add(new SimpleGrantedAuthority(role.getName()));}return authorities;}@Overridepublic String getPassword() {return this.password;}@Overridepublic String getUsername() {return this.username;}@Overridepublic boolean isAccountNonExpired() {return true;}@Overridepublic boolean isAccountNonLocked() {return !this.locked;}@Overridepublic boolean isCredentialsNonExpired(){return true;}@Overridepublic boolean isEnabled(){return this.enabled;}
      }
      
    • 配置mybatis
      @Mapper
      public interface UserMapper {User loadUserByUserName(String usernam);List<Role> getUserRolesByUid(Integer id);
      }
      
    • 配置mybatisxml配置文件
      <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.example.demo.repository.mybatis.UserMapper"><select id="loadUserByUserName" resultType="com.example.demo.authentication.User">select * from "USER" where username=#{username}</select><select id="getUserRolesByUid" resultType="com.example.demo.authentication.Role">select * from "ROLE" r, "USER_ROLE" ur where r.id=ur.rid and ur.uid=#{id}</select>
      </mapper>
      
  5. 定义UserDetailsService
    @Service
    public class UserService implements UserDetailsService {@Autowiredpublic UserMapper userMapper;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {User user = userMapper.loadUserByUserName(username);if (user == null) {throw new UsernameNotFoundException("username is not found");}user.setRoles(userMapper.getUserRolesByUid(user.getId()));return user;}
    }
    
    注意,这里生成了UserDetailsServicebean,所以spring boot security的的认证处理,都会使用这个bean
  6. 整体的架构
    在这里插入图片描述
  7. 测试认证结果
    在这里插入图片描述
http://www.hkea.cn/news/591372/

相关文章:

  • ps做网站顶部江苏网络推广公司
  • 源码做网站手机网站百度关键词排名
  • 网站关键词分隔网站链接提交
  • 福永营销型网站多少钱中国最新消息今天
  • 做网站4000-262-263网站排名优化软件有哪些
  • 网站双链接怎么做网络舆情监测平台
  • 企业网站建设制作百度网盘下载app
  • asp做一个简单网站网络营销就是seo正确吗
  • 移动wap站点公司网站设计图
  • 网站策划建设seo搜索排名影响因素主要有
  • 大型商业广场网站建设互联网推广方案怎么写
  • p2vr做的网站上传网络广告策划书范文
  • 2022年大连黄页优化搜索引擎营销
  • 宁波有几个区昭通网站seo
  • 建设企业网站方案网站优化软件哪个好
  • 郑州做网站要搜索引擎最新排名
  • wordpress建好站了打不开首页成都关键词优化排名
  • 京东网站开发需求如何做谷歌优化
  • 微信app开发诊断网站seo现状的方法
  • 做旅行网站网站seo优化多少钱
  • 上海专业网站建设咨询网络销售怎么样
  • 奶茶网页设计图片湖南seo网站多少钱
  • 家里电脑做网站服务器如何建立网址
  • 临西做网站哪里便宜seo专业培训课程
  • 高端网站设计报价表个人网上卖货的平台
  • 广州网站优化推广公司网站优化排名资源
  • 济南网站建设大标网络企业seo服务
  • net域名大网站东莞关键词自动排名
  • 做企业平台的网站怎样进行网络营销吸引顾客
  • 天河网站 建设seo信科分公司谷歌搜索引擎网址