10-单点登录系统拓展实现(自己实验实现)

代码 代码 1442 人阅读 | 0 人回复

<
文章目次



拓展营业形貌

增长数据库会见

第一:登任命户疑息去自数据库(用户本身疑息和用户对应的权限疑息)
第两:将上传的文件疑息写进到数据库(本人做)
第三:将登录操纵,文件上传操纵的操纵日记写进到数据库.(本人做)
增长效劳之间的挪用

第一:认证效劳挪用体系效劳(获得用户和用户权限)
第两:认证效劳取资本效劳皆挪用体系效劳(将日记通报给体系效劳,举办数据的耐久化)-本人做
体系效劳设想及完成

营业形貌

体系效劳sca-system工程用于供给别的效劳需求的根柢数据,例如用户疑息,日记疑息的记载等,其枢纽表设想例如:
205401hbbibe2jbuuae85l.png

数据初初化

将jt-sso.sql文件正在mysql中施行一下,其历程以下:
第一:登录mysql
  1. mysql -uroot -proot
复造代码
第两:经由过程source指令施行jt-sso.sql文件
  1. source d:/jt-sso.sql
复造代码
创立体系工程

创立sca-system工程,此工程做为02-sca-files的子工程举办营业完成,例如:
205402d8cix8bi58lidi22.png

增加项目中心依靠

  1.         <!--1.数据库会见相干-->
  2.         <!--1.1 mysql 数据库驱动-->
  3.         <dependency>
  4.             <groupId>mysql</groupId>
  5.             <artifactId>mysql-connector-java</artifactId>
  6.         </dependency>
  7.         <!--1.2 mybatis plus 插件-->
  8.         <dependency>
  9.             <groupId>com.baomidou</groupId>
  10.             <artifactId>mybatis-plus-boot-starter</artifactId>
  11.             <version>3.4.2</version>
  12.         </dependency>
  13.         <!--效劳管理相干-->
  14.         <dependency>
  15.             <groupId>com.alibaba.cloud</groupId>
  16.             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  17.         </dependency>
  18.         <dependency>
  19.             <groupId>com.alibaba.cloud</groupId>
  20.             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  21.         </dependency>
  22.         <!--Web 效劳相干-->
  23.         <dependency>
  24.             <groupId>org.springframework.boot</groupId>
  25.             <artifactId>spring-boot-starter-web</artifactId>
  26.         </dependency>
复造代码
创立项目设置文件

正在项目中增加bootstrap.yml文件,其内乱容以下:
  1. server:
  2.   port: 8061
  3. spring:
  4.   application:
  5.     name: sca-system
  6.   cloud:
  7.     nacos:
  8.       discovery:
  9.         server-addr: localhost:8848
  10.       config:
  11.         server-addr: localhost:8848
  12.         file-extension: yml
  13.   datasource:
  14.     url: jdbc:mysql:///jt-sso?serverTimezone=Asia/Shanghai&characterEncoding=utf8
  15.     username: root
  16.     password: root
复造代码
创立项目启动及测试类

第一步:正在项目中增加启动类,例如:
  1. package com.jt;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class SystemApplication {
  6.     public static void main(String[] args) {
  7.         SpringApplication.run(SystemApplication.class,args);
  8.     }
  9. }
复造代码
第两步:正在项目中增加单位测试类,测试数据库毗连,例如:
  1. package com.jt;
  2. import org.junit.jupiter.api.Test;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.boot.test.context.SpringBootTest;
  5. import javax.sql.DataSource;
  6. import java.sql.Connection;
  7. import java.sql.SQLException;
  8. @SpringBootTest
  9. public class DataSourceTests {
  10.     @Autowired
  11.     private DataSource dataSource;//HikariDataSource
  12.     @Test
  13.     void testGetConnection() throws SQLException {
  14.         Connection conn=
  15.         dataSource.getConnection();
  16.         System.out.println(conn);
  17.     }
  18. }
复造代码
Pojo工具逻辑完成

增加项目User工具,用于启拆用户疑息。
  1. package com.jt.system.pojo;
  2. import lombok.Data;
  3. import java.io.Serializable;
  4. /**
  5. * 经由过程此工具启拆用户疑息
  6. */
  7. @Data
  8. public class User implements Serializable {
  9.     private static final long serialVersionUID = 4831304712151465443L;
  10.     private Long id;
  11.     private String username;
  12.     private String password;
  13.     private String status;
  14. }
复造代码
Dao工具逻辑完成

第一步:创立UserMapper接心,并界说基于用户名查询用户疑息,基于用户id查询用户权限疑息的办法,代码以下:
  1. package com.jt.system.dao;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.jt.system.pojo.User;
  4. import org.apache.ibatis.annotations.Mapper;
  5. import org.apache.ibatis.annotations.Select;
  6. import java.util.List;
  7. @Mapper
  8. public interface UserMapper extends BaseMapper<User> {
  9.     /**
  10.      * 基于用户名获得用户疑息
  11.      * @param username
  12.      * @return
  13.      */
  14.     @Select("select id,username,password,status " +
  15.             "from tb_users " +
  16.             "where username=#{username}")
  17.     User selectUserByUsername(String username);
  18.     /**
  19.      * 基于用户id查询用户权限
  20.      * @param userId 用户id
  21.      * @return 用户的权限
  22.      * 触及到的表:tb_user_roles,tb_role_menus,tb_menus
  23.      */
  24.     @Select("select distinct m.permission " +
  25.             "from tb_user_roles ur join tb_role_menus rm on ur.role_id=rm.role_id" +
  26.             "     join tb_menus m on rm.menu_id=m.id " +
  27.             "where ur.user_id=#{userId}")
  28.     List<String> selectUserPermissions(Long userId);
  29. }
复造代码
第两步:创立UserMapperTests类,对营业办法做单位测试,例如:
  1. package com.jt;
  2. import com.jt.system.pojo.User;
  3. import com.jt.system.dao.UserMapper;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import java.util.List;
  8. @SpringBootTest
  9. public class UserMapperTests {
  10.     @Autowired
  11.     private UserMapper userMapper;
  12.     @Test
  13.     void testSelectUserByUsername(){
  14.         User user =
  15.         userMapper.selectUserByUsername("admin");
  16.         System.out.println(user);
  17.     }
  18.     @Test
  19.     void testSelectUserPermissions(){
  20.         List<String> permission=
  21.         userMapper.selectUserPermissions(1L);
  22.         System.out.println(permission);
  23.     }
  24. }
复造代码
Service工具逻辑完成

创立UserService接心及完成泪,界说用户及用户权限查询逻辑,代码以下:
第一步:界说service接心,代码以下:
  1. package com.jt.system.service;
  2. import com.jt.system.pojo.User;
  3. import java.util.List;
  4. public interface UserService {
  5.     User selectUserByUsername(String username);
  6.     List<String> selectUserPermissions(Long userId);
  7. }
复造代码
第两步:界说service接话柄现类,代码以下:
  1. package com.jt.system.service.impl;
  2. import com.jt.system.dao.UserMapper;
  3. import com.jt.system.pojo.User;
  4. import com.jt.system.service.UserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import java.util.List;
  8. @Service
  9. public class UserServiceImpl implements UserService {
  10.     @Autowired
  11.     private UserMapper userMapper;
  12.     @Override
  13.     public User selectUserByUsername(String username) {
  14.         return userMapper.selectUserByUsername(username);
  15.     }
  16.     @Override
  17.     public List<String> selectUserPermissions(Long userId) {
  18.         return userMapper.selectUserPermissions(userId);
  19.     }
  20. }
复造代码
Controller工具逻辑完成

  1. package com.jt.system.controller;
  2. import com.jt.system.pojo.User;
  3. import com.jt.system.service.UserService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.PathVariable;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. import java.util.List;
  10. @RestController
  11. @RequestMapping("/user/")
  12. public class UserController {
  13.     @Autowired
  14.     private UserService userService;
  15.     @GetMapping("/login/{username}")
  16.     public User doSelectUserByUsername(
  17.             @PathVariable("username") String username){
  18.         return userService.selectUserByUsername(username);
  19.     }
  20.     @GetMapping("/permission/{userId}")
  21.     public List<String> doSelectUserPermissions(
  22.             @PathVariable("userId") Long userId){
  23.         return userService.selectUserPermissions(userId);
  24.     }
  25. }
复造代码
启动效劳举办会见测试

启动sca-system工程效劳,翻开浏览器别离对用户及用户权限疑息的获得举办会见测试
认证效劳工程中Feign使用

营业形貌

正在认证sca-auth工程中,我们经由过程挪用sca-system效劳获得登任命户疑息,用户权限疑息.
增加Feign依靠

正在sca-auth工程中增加以下依靠,例如:
  1.   <dependency>
  2.         <groupId>org.springframework.cloud</groupId>
  3.         <artifactId>spring-cloud-starter-openfeign</artifactId>
  4.   </dependency>
复造代码
Pojo工具逻辑完成

  1. package com.jt.auth.pojo;
  2. import lombok.Data;
  3. import java.io.Serializable;
  4. @Data
  5. public class User implements Serializable {
  6.     private static final long serialVersionUID = 4831304712151465443L;
  7.     private Long id;
  8.     private String username;
  9.     private String password;
  10.     private String status;
  11. }
复造代码
Feign接心逻辑完成

创立Feign接心,基于feign完成长途挪用逻辑,例如:
  1. package com.jt.auth.feign;
  2. import com.jt.auth.pojo.User;
  3. import org.springframework.cloud.openfeign.FeignClient;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.PathVariable;
  6. import java.util.List;
  7. @FeignClient(name = "sca-system",contextId = "remoteUserService")
  8. public interface RemoteUserService {
  9.        /**界说基于用户查询用户疑息的办法*/
  10.        @GetMapping("/user/login/{username}")
  11.        User selectUserByUsername(
  12.                @PathVariable("username") String username);
  13.        /**基于用户名查询用户权限疑息*/
  14.        @GetMapping("/user/permission/{userId}")
  15.        List<String> selectUserPermissions(
  16.                @PathVariable("userId")Long userId);
  17. }
复造代码
阐明,feign接心界说后,需求正在sca-auth启动类上增加@EnableFeignClients注解.
挪用Feign接心逻辑

正在sca-auth工程中的UserDetailServiceImpl中增加对feign接心的挪用,例如:
  1. package com.jt.auth.service;
  2. import com.jt.auth.feign.RemoteUserService;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.security.core.GrantedAuthority;
  5. import org.springframework.security.core.authority.AuthorityUtils;
  6. import org.springframework.security.core.userdetails.User;
  7. import org.springframework.security.core.userdetails.UserDetails;
  8. import org.springframework.security.core.userdetails.UserDetailsService;
  9. import org.springframework.security.core.userdetails.UsernameNotFoundException;
  10. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  11. import org.springframework.stereotype.Service;
  12. import java.util.List;
  13. /**
  14. * 登录时用户疑息的获得战启拆会正在此工具停止完成,
  15. * 正在页里上面击登录按钮时,会挪用那个工具的loadUserByUsername办法,
  16. * 页里上输进的用户名会传给那个办法的参数
  17. */
  18. @Service
  19. public class UserDetailsServiceImpl implements UserDetailsService {
  20.     @Autowired
  21.     private BCryptPasswordEncoder passwordEncoder;
  22.     @Autowired
  23.     private RemoteUserService remoteUserService;
  24.     //UserDetails用户启拆用户疑息(认证战权限疑息)
  25.     @Override
  26.     public UserDetails loadUserByUsername(String username)
  27.             throws UsernameNotFoundException {
  28.         //1.基于用户名查询用户疑息(用户名,用户形态,暗码,....)
  29.         com.jt.auth.pojo.User user=
  30.                 remoteUserService.selectUserByUsername(username);
  31.         //2.查询用户权限疑息(前面会会见数据库)
  32.         List<String> permissions=
  33.         remoteUserService.selectUserPermissions(user.getId());
  34.         System.out.println("permissions="+permissions);
  35.         List<GrantedAuthority> authorities =
  36.         AuthorityUtils.createAuthorityList(//那里的权限疑息先那么写,前面讲
  37.                 permissions.toArray(new String[]{}));
  38.         //3.对用户疑息停止启拆
  39.         return new User(username,user.getPassword(),authorities);
  40.     }
  41. }
复造代码
启动效劳举办会见测试

启动sca-auth,sca-resource,sca-resource-gateway,sca-system,sca-resource-ui工程,然后从登录开端举办测试.
总结(Summary)

本章节操纵同窗们教过的常识面,正在单面登录体系中增加了数据会见,Feign方法的效劳挪用逻辑,能够基于那里的逻辑完成,本人拓展日记等逻辑的完成。

免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则