本次实践,我们的认证服务(auth)中需要的用户信息以及用户的权限信息由系统服务(sca-system)提供,我们可以在auth工程中通过feign方式对系统服务(sca-system)工程进行调用,例如:
将jt-sso.sql文件在mysql中执行一下,其过程如下:
第一:登录mysql
mysql -uroot -proot
第二:通过source指令执行jt-sso.sql文件
source d:/jt-sso.sql
其中,数据库中表与表之间的关系如下:
创建sca-system工程,此工程作为02-sca-files的子工程进行业务实现,例如:
mysql
mysql-connector-java
com.baomidou
mybatis-plus-boot-starter
3.4.2
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
org.springframework.boot
spring-boot-starter-web
在项目中添加bootstrap.yml文件,其内容如下:
server:
port: 8061
spring:
application:
name: sca-system
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
file-extension: yml
datasource:
url: jdbc:mysql:///jt-sso?serverTimezone=Asia/Shanghai&characterEncoding=utf8
username: root
password: root
第一步:在项目中添加启动类,例如:
package com.jt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SystemApplication {
public static void main(String[] args) {
SpringApplication.run(SystemApplication.class,args);
}
}
第二步:在项目中添加单元测试类,测试数据库连接,例如:
package com.jt;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@SpringBootTest
public class DataSourceTests {
@Autowired
private DataSource dataSource;//HikariDataSource
@Test
void testGetConnection() throws SQLException {
Connection conn=
dataSource.getConnection();
System.out.println(conn);
}
}
添加项目User对象,用于封装用户信息。
package com.jt.system.pojo;
import lombok.Data;
import java.io.Serializable;
/**
- 通过此对象封装用户信息
*/
@Data
public class User implements Serializable {
private static final long serialVersionUID = 4831304712151465443L;
private Long id;
private String username;
private String password;
private String status;
}
第一步:创建UserMapper接口,并定义基于用户名查询用户信息,基于用户id查询用户权限信息的方法,代码如下:
package com.jt.system.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.system.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper extends BaseMapper {
/**
-
基于用户名获取用户信息
-
@param username
-
@return
*/
@Select("select id,username,password,status " +
"from tb_users " +
“where username=#{username}”)
User selectUserByUsername(String username);
/**
-
基于用户id查询用户权限
-
@param userId 用户id
-
@return 用户的权限
-
涉及到的表:tb_user_roles,tb_role_menus,tb_menus
*/
@Select("select distinct m.permission " +
“from tb_user_roles ur join tb_role_menus rm on ur.role_id=rm.role_id” +
" join tb_menus m on rm.menu_id=m.id " +
“where ur.user_id=#{userId}”)
List selectUserPermissions(Long userId);
}
第二步:创建UserMapperTests类,对业务方法做单元测试,例如:
package com.jt;
import com.jt.system.pojo.User;
import com.jt.system.dao.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class UserMapperTests {
@Autowired
private UserMapper userMapper;
@Test
void testSelectUserByUsername(){
User user =
userMapper.selectUserByUsername(“admin”);
System.out.println(user);
}
@Test
void testSelectUserPermissions(){
List permission=
userMapper.selectUserPermissions(1L);
System.out.println(permission);
}
}
创建UserService接口及实现泪,定义用户及用户权限查询逻辑,代码如下:
第一步:定义service接口,代码如下:
package com.jt.system.service;
import com.jt.system.pojo.User;
import java.util.List;
public interface UserService {
User selectUserByUsername(String username);
List selectUserPermissions(Long userId);
}
第二步:定义service接口实现类,代码如下:
package com.jt.system.service.impl;
import com.jt.system.dao.UserMapper;
import com.jt.system.pojo.User;
import com.jt.system.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User selectUserByUsername(String username) {
return userMapper.selectUserByUsername(username);
}
@Override
public List selectUserPermissions(Long userId) {
return userMapper.selectUserPermissions(userId);
}
}
必看视频!获取2024年最新Java开发全套学习资料
package com.jt.system.controller;
import com.jt.system.pojo.User;
import com.jt.system.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping(“/user/”)
public class UserController {
@Autowired
private UserService userService;
@GetMapping(“/login/{username}”)
public User doSelectUserByUsername(
@PathVariable(“username”) String username){
return userService.selectUserByUsername(username);
}
@GetMapping(“/permission/{userId}”)
public List doSelectUserPermissions(
@PathVariable(“userId”) Long userId){
return userService.selectUserPermissions(userId);
}
}
启动sca-system工程服务,打开浏览器分别对用户及用户权限信息的获取进行访问测试
========================================================================
在认证sca-auth工程中,我们通过调用sca-system服务获取登录用户信息,用户权限信息.
在sca-auth工程中添加如下依赖,例如:
org.springframework.cloud
spring-cloud-starter-openfeign
知其然不知其所以然,大厂常问面试技术如何复习?
1、热门面试题及答案大全
面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer
2、多线程、高并发、缓存入门到实战项目pdf书籍
3、文中提到面试题答案整理
4、Java核心知识面试宝典
覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入
知其然不知其所以然,大厂常问面试技术如何复习?
1、热门面试题及答案大全
面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer
[外链图片转存中…(img-8zgjOv1a-1720152957599)]
2、多线程、高并发、缓存入门到实战项目pdf书籍
[外链图片转存中…(img-4osVchN6-1720152957599)]
[外链图片转存中…(img-xW8NU0ku-1720152957600)]
[外链图片转存中…(img-KOwXHxnT-1720152957600)]
3、文中提到面试题答案整理
[外链图片转存中…(img-mJe9sS5I-1720152957601)]
4、Java核心知识面试宝典
覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入
[外链图片转存中…(img-CmWAFVzF-1720152957602)]
[外链图片转存中…(img-oa1jiiRD-1720152957602)]
[外链图片转存中…(img-fWloeYbh-1720152957603)]