10-单点登录系统拓展实现(2105~2106),教你抓住面试的重点和难点

业务描述


本次实践,我们的认证服务(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);

}

}

Pojo对象逻辑实现


添加项目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;

}

Dao对象逻辑实现


第一步:创建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);

}

}

Service对象逻辑实现


创建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);

}

}

Controller对象逻辑实现


必看视频!获取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工程服务,打开浏览器分别对用户及用户权限信息的获取进行访问测试

认证服务工程中Feign应用

========================================================================

业务描述


在认证sca-auth工程中,我们通过调用sca-system服务获取登录用户信息,用户权限信息.

添加Feign依赖


在sca-auth工程中添加如下依赖,例如:

org.springframework.cloud

spring-cloud-starter-openfeign

Pojo对象逻辑实现

知其然不知其所以然,大厂常问面试技术如何复习?

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的大量技术点且讲解的非常深入

Pojo对象逻辑实现

知其然不知其所以然,大厂常问面试技术如何复习?

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)]

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值