From 56e70736c9d5acf5b78171ae2d946de82302b9fb Mon Sep 17 00:00:00 2001 From: bruce Date: Wed, 12 Feb 2025 23:47:57 +0800 Subject: [PATCH] =?UTF-8?q?v0.03=20=E9=87=8D=E6=9E=84=E6=8D=A2=E5=88=86?= =?UTF-8?q?=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 80 ++++++------- .../com/bruce/sams/Config/SecurityConfig.java | 95 --------------- .../sams/Controller/LoginController.java | 4 +- .../bruce/sams/Controller/UserController.java | 5 + .../java/com/bruce/sams/Utils/TokenUtil.java | 105 +++++++--------- .../sams/{Entity => domain}/SysRole.java | 3 +- .../sams/{Entity => domain}/SysUser.java | 3 +- .../bruce/sams/domain/entity/UserDetail.java | 49 ++++++++ .../CustomException.java | 2 +- .../user}/IncorrectPasswordException.java | 4 +- .../InsufficientPermissionsException.java | 4 +- .../user}/InvalidInputException.java | 4 +- .../user}/UserNotFoundException.java | 4 +- .../{Mapper => mapper}/SysRoleMapper.java | 4 +- .../{Mapper => mapper}/SysUserMapper.java | 4 +- .../{Service => service}/SysLoginService.java | 2 +- .../{Service => service}/SysRoleService.java | 4 +- .../{Service => service}/SysUserService.java | 6 +- .../impl/SysLoginServiceImpl.java | 33 +++-- .../impl/SysRoleServiceImpl.java | 8 +- .../impl/SysUserServiceImpl.java | 12 +- src/main/resources/application.yml | 22 +++- src/main/resources/logback.xml | 113 +++++++++++++----- .../sams/Mapper => mapper}/SysRoleMapper.xml | 2 +- .../sams/Mapper => mapper}/SysUserMapper.xml | 2 +- 25 files changed, 297 insertions(+), 277 deletions(-) delete mode 100644 src/main/java/com/bruce/sams/Config/SecurityConfig.java rename src/main/java/com/bruce/sams/{Entity => domain}/SysRole.java (97%) rename src/main/java/com/bruce/sams/{Entity => domain}/SysUser.java (98%) create mode 100644 src/main/java/com/bruce/sams/domain/entity/UserDetail.java rename src/main/java/com/bruce/sams/{Exception => exception}/CustomException.java (86%) rename src/main/java/com/bruce/sams/{Exception/User => exception/user}/IncorrectPasswordException.java (67%) rename src/main/java/com/bruce/sams/{Exception/User => exception/user}/InsufficientPermissionsException.java (68%) rename src/main/java/com/bruce/sams/{Exception/User => exception/user}/InvalidInputException.java (66%) rename src/main/java/com/bruce/sams/{Exception/User => exception/user}/UserNotFoundException.java (65%) rename src/main/java/com/bruce/sams/{Mapper => mapper}/SysRoleMapper.java (83%) rename src/main/java/com/bruce/sams/{Mapper => mapper}/SysUserMapper.java (83%) rename src/main/java/com/bruce/sams/{Service => service}/SysLoginService.java (86%) rename src/main/java/com/bruce/sams/{Service => service}/SysRoleService.java (78%) rename src/main/java/com/bruce/sams/{Service => service}/SysUserService.java (85%) rename src/main/java/com/bruce/sams/{Service => service}/impl/SysLoginServiceImpl.java (55%) rename src/main/java/com/bruce/sams/{Service => service}/impl/SysRoleServiceImpl.java (69%) rename src/main/java/com/bruce/sams/{Service => service}/impl/SysUserServiceImpl.java (91%) rename src/main/resources/{com/bruce/sams/Mapper => mapper}/SysRoleMapper.xml (91%) rename src/main/resources/{com/bruce/sams/Mapper => mapper}/SysUserMapper.xml (94%) diff --git a/pom.xml b/pom.xml index 5ad2e195..a6772f8b 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.bruce - SAMS + SAMS_O 0.0.1-SNAPSHOT SAMS SAMS @@ -39,73 +39,64 @@ spring-boot-starter-web - - com.baomidou - mybatis-plus-spring-boot3-starter - 3.5.10.1 - - - com.mysql - mysql-connector-j - runtime - - - org.projectlombok - lombok - true - org.springframework.boot spring-boot-starter-test test - - org.mybatis.spring.boot - mybatis-spring-boot-starter-test - 3.0.4 - test - + org.springframework.security spring-security-test test - + - io.jsonwebtoken - jjwt-api - 0.11.5 + org.springframework.boot + spring-boot-starter-logging + 3.4.2 + + - io.jsonwebtoken - jjwt-impl - 0.11.5 - runtime + com.baomidou + mybatis-plus-spring-boot3-starter + 3.5.10.1 + + - io.jsonwebtoken - jjwt-jackson - 0.11.5 + com.mysql + mysql-connector-j runtime - - ch.qos.logback - logback-core - 1.5.16 + org.projectlombok + lombok + 1.18.36 + true + + - ch.qos.logback - logback-classic - 1.5.16 + org.springframework.boot + spring-boot-starter-validation - + + - org.slf4j - slf4j-api - 2.0.16 + io.jsonwebtoken + jjwt + 0.12.5 + + + + + com.alibaba.fastjson2 + fastjson2 + 2.0.53 @@ -120,6 +111,7 @@ org.projectlombok lombok + 1.18.36 diff --git a/src/main/java/com/bruce/sams/Config/SecurityConfig.java b/src/main/java/com/bruce/sams/Config/SecurityConfig.java deleted file mode 100644 index 21ad4e2a..00000000 --- a/src/main/java/com/bruce/sams/Config/SecurityConfig.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.bruce.sams.Config; - -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.bruce.sams.Entity.SysRole; -import com.bruce.sams.Service.SysUserService; -import com.bruce.sams.Entity.SysUser; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.web.SecurityFilterChain; - -/** - * Spring Secrutiy 配置类 提供密码验证和鉴权 - */ - -@Configuration -public class SecurityConfig { - - private final SysUserService userService; - - public SecurityConfig(SysUserService userService) { - this.userService = userService; - } - - // 配置 AuthenticationManager,处理用户登录 - @Bean - public AuthenticationManager authenticationManager(HttpSecurity http) throws Exception { - AuthenticationManagerBuilder authenticationManagerBuilder = http.getSharedObject(AuthenticationManagerBuilder.class); - authenticationManagerBuilder.userDetailsService(userDetailsService()) - .passwordEncoder(passwordEncoder()); - return authenticationManagerBuilder.build(); - } - - // 配置 UserDetailsService,用于从数据库加载用户信息 - - @Bean - public UserDetailsService userDetailsService() { - return username -> { - // 获取用户信息 - SysUser user = userService.getOne(Wrappers.lambdaQuery().eq(SysUser::getUserName, username)); - - if (user == null) { - throw new UsernameNotFoundException("用户不存在"); - } - - // 获取角色信息 - SysRole role = userService.getRoleByUserId(user.getUserId()); // 假设你提供了这个方法来查询角色 - - if (role == null) { - throw new UsernameNotFoundException("用户角色不存在"); - } - - // 将角色添加为 ROLE_ 前缀 - return org.springframework.security.core.userdetails.User - .withUsername(user.getUserName()) - .password(user.getPasswd()) - .roles("ROLE_" + role.getRoleKey()) // 根据角色的 role_key 设置角色,确保加上 ROLE_ 前缀 - .build(); - }; - } - - - // 配置密码加密方式 - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } - - // 配置 HttpSecurity,进行权限管理 - @Bean - public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { - http - .authorizeHttpRequests(authz -> authz - .requestMatchers("/login", "/register").permitAll() // 登录和注册允许匿名访问 - .requestMatchers("/admin/**").hasRole("ADMIN") // 只有 ADMIN 角色才能访问 /admin 路径 - .requestMatchers("/user/**").hasRole("USER") // 只有 USER 角色才能访问 /user 路径 - .anyRequest().authenticated() // 其他请求需要认证 - ) - .formLogin(form -> form - .loginPage("/login") // 登录页面 - .permitAll() - ) - .logout(logout -> logout - .permitAll() - ); - - return http.build(); - } -} diff --git a/src/main/java/com/bruce/sams/Controller/LoginController.java b/src/main/java/com/bruce/sams/Controller/LoginController.java index a8e22478..3bac70b6 100644 --- a/src/main/java/com/bruce/sams/Controller/LoginController.java +++ b/src/main/java/com/bruce/sams/Controller/LoginController.java @@ -1,6 +1,6 @@ package com.bruce.sams.Controller; -import com.bruce.sams.Service.SysLoginService; +import com.bruce.sams.service.SysLoginService; import com.bruce.sams.Utils.AjaxResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -19,7 +19,7 @@ public class LoginController { * @param password 密码 * @return AjaxResult 包含登录状态和token */ - @PostMapping + @PostMapping("/login") public AjaxResult login(@RequestParam String schoolId, @RequestParam String password) { try { // 调用登录服务,生成Token diff --git a/src/main/java/com/bruce/sams/Controller/UserController.java b/src/main/java/com/bruce/sams/Controller/UserController.java index 803f5f1f..b795fd41 100644 --- a/src/main/java/com/bruce/sams/Controller/UserController.java +++ b/src/main/java/com/bruce/sams/Controller/UserController.java @@ -1,10 +1,15 @@ package com.bruce.sams.Controller; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/user") public class UserController { + @GetMapping("/zhangsan") + public String show (){ + return "这是张三"; + } } diff --git a/src/main/java/com/bruce/sams/Utils/TokenUtil.java b/src/main/java/com/bruce/sams/Utils/TokenUtil.java index 8b2f8f32..a2782194 100644 --- a/src/main/java/com/bruce/sams/Utils/TokenUtil.java +++ b/src/main/java/com/bruce/sams/Utils/TokenUtil.java @@ -1,87 +1,74 @@ package com.bruce.sams.Utils; -import io.jsonwebtoken.Claims; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.*; import io.jsonwebtoken.security.Keys; -import org.springframework.stereotype.Component; +import java.nio.charset.StandardCharsets; import java.security.Key; import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; public class TokenUtil { - // 密钥,用于签名和验证Token - private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256); + private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256); // 需要一个256-bit的密钥 + private static final long EXPIRATION_TIME = 1000 * 60 * 60 * 10; // 10小时 - // Token过期时间(单位:毫秒) - private static final long EXPIRATION_TIME = 3600000; // 1小时 - /** - * 生成Token - * - * @param userId 用户ID - * @return 生成的Token - */ - public static String generateToken(String userId) { + + // 生成Token + public static String generateToken(Long userId, Long roleId) { Map claims = new HashMap<>(); - claims.put("userId", userId); // 将用户ID放入Token的负载部分 - + claims.put("roleId", roleId); // 存储权限ID return Jwts.builder() - .setClaims(claims) // 设置自定义信息 - .setIssuedAt(new Date(System.currentTimeMillis())) // 设置签发时间 - .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 设置过期时间 - .signWith(SECRET_KEY) // 使用密钥进行签名 - .compact(); // 生成Token + .setClaims(claims) + .setSubject(String.valueOf(userId)) // 用户ID + .setIssuedAt(new Date()) // 签发时间 + .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 过期时间 + .signWith(SECRET_KEY, SignatureAlgorithm.HS256) // 签名 + .compact(); } - /** - * 验证Token是否有效 - * - * @param token Token字符串 - * @return 是否有效 - */ + // 验证Token public static boolean validateToken(String token) { try { - Jwts.parserBuilder() - .setSigningKey(SECRET_KEY) // 设置密钥 - .build() - .parseClaimsJws(token); // 解析Token - return true; // 如果没有异常,表示Token有效 - } catch (Exception e) { - return false; // 如果解析失败,表示Token无效 + Jwts.parser().setSigningKey(SECRET_KEY).build().parseClaimsJws(token); + return true; + } catch (JwtException | IllegalArgumentException e) { + return false; } } - /** - * 从Token中提取用户ID - * - * @param token Token字符串 - * @return 用户ID - */ - public static String getUserIdFromToken(String token) { - Claims claims = Jwts.parserBuilder() - .setSigningKey(SECRET_KEY) // 设置密钥 - .build() - .parseClaimsJws(token) // 解析Token - .getBody(); - return claims.get("userId", String.class); // 提取用户ID + // 提取用户ID + public static Long extractUserId(String token) { + String userId = extractClaim(token, Claims::getSubject); + return userId != null ? Long.parseLong(userId) : null; } - /** - * 获取Token的过期时间 - * - * @param token Token字符串 - * @return 过期时间 - */ - public static Date getExpirationDateFromToken(String token) { - Claims claims = Jwts.parserBuilder() - .setSigningKey(SECRET_KEY) // 设置密钥 + // 提取权限ID + public static Long extractRoleId(String token) { + Claims claims = extractAllClaims(token); + return claims.get("roleId", Long.class); + } + + // 提取过期时间 + public static Date extractExpiration(String token) { + return extractClaim(token, Claims::getExpiration); + } + + // 提取单个Claim + private static T extractClaim(String token, Function claimsResolver) { + final Claims claims = extractAllClaims(token); + return claimsResolver.apply(claims); + } + + // 解析所有Claims + private static Claims extractAllClaims(String token) { + return Jwts.parserBuilder() + .setSigningKey(getSigningKey()) .build() - .parseClaimsJws(token) // 解析Token + .parseClaimsJws(token) .getBody(); - return claims.getExpiration(); // 获取Token的过期时间 } } diff --git a/src/main/java/com/bruce/sams/Entity/SysRole.java b/src/main/java/com/bruce/sams/domain/SysRole.java similarity index 97% rename from src/main/java/com/bruce/sams/Entity/SysRole.java rename to src/main/java/com/bruce/sams/domain/SysRole.java index 52aefde9..88cba6ae 100644 --- a/src/main/java/com/bruce/sams/Entity/SysRole.java +++ b/src/main/java/com/bruce/sams/domain/SysRole.java @@ -1,7 +1,6 @@ -package com.bruce.sams.Entity; +package com.bruce.sams.domain; import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; diff --git a/src/main/java/com/bruce/sams/Entity/SysUser.java b/src/main/java/com/bruce/sams/domain/SysUser.java similarity index 98% rename from src/main/java/com/bruce/sams/Entity/SysUser.java rename to src/main/java/com/bruce/sams/domain/SysUser.java index fe721643..4eac785e 100644 --- a/src/main/java/com/bruce/sams/Entity/SysUser.java +++ b/src/main/java/com/bruce/sams/domain/SysUser.java @@ -1,7 +1,6 @@ -package com.bruce.sams.Entity; +package com.bruce.sams.domain; import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; diff --git a/src/main/java/com/bruce/sams/domain/entity/UserDetail.java b/src/main/java/com/bruce/sams/domain/entity/UserDetail.java new file mode 100644 index 00000000..855bda52 --- /dev/null +++ b/src/main/java/com/bruce/sams/domain/entity/UserDetail.java @@ -0,0 +1,49 @@ +package com.bruce.sams.domain.entity; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; +import java.util.List; + +public class UserDetail implements UserDetails { + + private Long userId; + + private Long roleId; + + @Override + public Collection getAuthorities() { + return List.of(); + } + + @Override + public String getPassword() { + return ""; + } + + @Override + public String getUsername() { + return ""; + } + + @Override + public boolean isAccountNonExpired() { + return UserDetails.super.isAccountNonExpired(); + } + + @Override + public boolean isAccountNonLocked() { + return UserDetails.super.isAccountNonLocked(); + } + + @Override + public boolean isCredentialsNonExpired() { + return UserDetails.super.isCredentialsNonExpired(); + } + + @Override + public boolean isEnabled() { + return UserDetails.super.isEnabled(); + } +} diff --git a/src/main/java/com/bruce/sams/Exception/CustomException.java b/src/main/java/com/bruce/sams/exception/CustomException.java similarity index 86% rename from src/main/java/com/bruce/sams/Exception/CustomException.java rename to src/main/java/com/bruce/sams/exception/CustomException.java index d3a17c90..51edbb82 100644 --- a/src/main/java/com/bruce/sams/Exception/CustomException.java +++ b/src/main/java/com/bruce/sams/exception/CustomException.java @@ -1,4 +1,4 @@ -package com.bruce.sams.Exception; +package com.bruce.sams.exception; public class CustomException extends RuntimeException { public CustomException(String message) { diff --git a/src/main/java/com/bruce/sams/Exception/User/IncorrectPasswordException.java b/src/main/java/com/bruce/sams/exception/user/IncorrectPasswordException.java similarity index 67% rename from src/main/java/com/bruce/sams/Exception/User/IncorrectPasswordException.java rename to src/main/java/com/bruce/sams/exception/user/IncorrectPasswordException.java index e2fb59d1..48b4292a 100644 --- a/src/main/java/com/bruce/sams/Exception/User/IncorrectPasswordException.java +++ b/src/main/java/com/bruce/sams/exception/user/IncorrectPasswordException.java @@ -1,6 +1,6 @@ -package com.bruce.sams.Exception.User; +package com.bruce.sams.exception.user; -import com.bruce.sams.Exception.CustomException; +import com.bruce.sams.exception.CustomException; /** * 密码错误异常 diff --git a/src/main/java/com/bruce/sams/Exception/User/InsufficientPermissionsException.java b/src/main/java/com/bruce/sams/exception/user/InsufficientPermissionsException.java similarity index 68% rename from src/main/java/com/bruce/sams/Exception/User/InsufficientPermissionsException.java rename to src/main/java/com/bruce/sams/exception/user/InsufficientPermissionsException.java index 3010ab37..a6c14aba 100644 --- a/src/main/java/com/bruce/sams/Exception/User/InsufficientPermissionsException.java +++ b/src/main/java/com/bruce/sams/exception/user/InsufficientPermissionsException.java @@ -1,6 +1,6 @@ -package com.bruce.sams.Exception.User; +package com.bruce.sams.exception.user; -import com.bruce.sams.Exception.CustomException; +import com.bruce.sams.exception.CustomException; /** * 权限不足异常 diff --git a/src/main/java/com/bruce/sams/Exception/User/InvalidInputException.java b/src/main/java/com/bruce/sams/exception/user/InvalidInputException.java similarity index 66% rename from src/main/java/com/bruce/sams/Exception/User/InvalidInputException.java rename to src/main/java/com/bruce/sams/exception/user/InvalidInputException.java index 97f6ba05..44af8fc3 100644 --- a/src/main/java/com/bruce/sams/Exception/User/InvalidInputException.java +++ b/src/main/java/com/bruce/sams/exception/user/InvalidInputException.java @@ -1,6 +1,6 @@ -package com.bruce.sams.Exception.User; +package com.bruce.sams.exception.user; -import com.bruce.sams.Exception.CustomException; +import com.bruce.sams.exception.CustomException; /** * 无效输入异常 diff --git a/src/main/java/com/bruce/sams/Exception/User/UserNotFoundException.java b/src/main/java/com/bruce/sams/exception/user/UserNotFoundException.java similarity index 65% rename from src/main/java/com/bruce/sams/Exception/User/UserNotFoundException.java rename to src/main/java/com/bruce/sams/exception/user/UserNotFoundException.java index 960acd79..cf641e8e 100644 --- a/src/main/java/com/bruce/sams/Exception/User/UserNotFoundException.java +++ b/src/main/java/com/bruce/sams/exception/user/UserNotFoundException.java @@ -1,6 +1,6 @@ -package com.bruce.sams.Exception.User; +package com.bruce.sams.exception.user; -import com.bruce.sams.Exception.CustomException; +import com.bruce.sams.exception.CustomException; /** * 用户不存在 diff --git a/src/main/java/com/bruce/sams/Mapper/SysRoleMapper.java b/src/main/java/com/bruce/sams/mapper/SysRoleMapper.java similarity index 83% rename from src/main/java/com/bruce/sams/Mapper/SysRoleMapper.java rename to src/main/java/com/bruce/sams/mapper/SysRoleMapper.java index b00a53da..9fd1f4a6 100644 --- a/src/main/java/com/bruce/sams/Mapper/SysRoleMapper.java +++ b/src/main/java/com/bruce/sams/mapper/SysRoleMapper.java @@ -1,6 +1,6 @@ -package com.bruce.sams.Mapper; +package com.bruce.sams.mapper; -import com.bruce.sams.Entity.SysRole; +import com.bruce.sams.domain.SysRole; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; diff --git a/src/main/java/com/bruce/sams/Mapper/SysUserMapper.java b/src/main/java/com/bruce/sams/mapper/SysUserMapper.java similarity index 83% rename from src/main/java/com/bruce/sams/Mapper/SysUserMapper.java rename to src/main/java/com/bruce/sams/mapper/SysUserMapper.java index dd383605..41cdcffb 100644 --- a/src/main/java/com/bruce/sams/Mapper/SysUserMapper.java +++ b/src/main/java/com/bruce/sams/mapper/SysUserMapper.java @@ -1,6 +1,6 @@ -package com.bruce.sams.Mapper; +package com.bruce.sams.mapper; -import com.bruce.sams.Entity.SysUser; +import com.bruce.sams.domain.SysUser; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; diff --git a/src/main/java/com/bruce/sams/Service/SysLoginService.java b/src/main/java/com/bruce/sams/service/SysLoginService.java similarity index 86% rename from src/main/java/com/bruce/sams/Service/SysLoginService.java rename to src/main/java/com/bruce/sams/service/SysLoginService.java index 3cacb41f..4bd2462d 100644 --- a/src/main/java/com/bruce/sams/Service/SysLoginService.java +++ b/src/main/java/com/bruce/sams/service/SysLoginService.java @@ -1,4 +1,4 @@ -package com.bruce.sams.Service; +package com.bruce.sams.service; public interface SysLoginService { /** diff --git a/src/main/java/com/bruce/sams/Service/SysRoleService.java b/src/main/java/com/bruce/sams/service/SysRoleService.java similarity index 78% rename from src/main/java/com/bruce/sams/Service/SysRoleService.java rename to src/main/java/com/bruce/sams/service/SysRoleService.java index 41c32ddb..141ed943 100644 --- a/src/main/java/com/bruce/sams/Service/SysRoleService.java +++ b/src/main/java/com/bruce/sams/service/SysRoleService.java @@ -1,6 +1,6 @@ -package com.bruce.sams.Service; +package com.bruce.sams.service; -import com.bruce.sams.Entity.SysRole; +import com.bruce.sams.domain.SysRole; import com.baomidou.mybatisplus.extension.service.IService; /** diff --git a/src/main/java/com/bruce/sams/Service/SysUserService.java b/src/main/java/com/bruce/sams/service/SysUserService.java similarity index 85% rename from src/main/java/com/bruce/sams/Service/SysUserService.java rename to src/main/java/com/bruce/sams/service/SysUserService.java index 3830f039..5dd6add2 100644 --- a/src/main/java/com/bruce/sams/Service/SysUserService.java +++ b/src/main/java/com/bruce/sams/service/SysUserService.java @@ -1,7 +1,7 @@ -package com.bruce.sams.Service; +package com.bruce.sams.service; -import com.bruce.sams.Entity.SysRole; -import com.bruce.sams.Entity.SysUser; +import com.bruce.sams.domain.SysRole; +import com.bruce.sams.domain.SysUser; import com.baomidou.mybatisplus.extension.service.IService; /** diff --git a/src/main/java/com/bruce/sams/Service/impl/SysLoginServiceImpl.java b/src/main/java/com/bruce/sams/service/impl/SysLoginServiceImpl.java similarity index 55% rename from src/main/java/com/bruce/sams/Service/impl/SysLoginServiceImpl.java rename to src/main/java/com/bruce/sams/service/impl/SysLoginServiceImpl.java index f63761c8..4b31dac8 100644 --- a/src/main/java/com/bruce/sams/Service/impl/SysLoginServiceImpl.java +++ b/src/main/java/com/bruce/sams/service/impl/SysLoginServiceImpl.java @@ -1,20 +1,23 @@ -package com.bruce.sams.Service.impl; +package com.bruce.sams.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.bruce.sams.Entity.SysUser; -import com.bruce.sams.Exception.User.IncorrectPasswordException; -import com.bruce.sams.Exception.User.UserNotFoundException; +import com.bruce.sams.domain.SysUser; +import com.bruce.sams.exception.user.IncorrectPasswordException; +import com.bruce.sams.exception.user.UserNotFoundException; import com.bruce.sams.Utils.PasswordEncoder; import com.bruce.sams.Utils.TokenUtil; -import com.bruce.sams.Mapper.SysUserMapper; -import com.bruce.sams.Service.SysLoginService; +import com.bruce.sams.mapper.SysUserMapper; +import com.bruce.sams.service.SysLoginService; import jakarta.annotation.Resource; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; @Service public class SysLoginServiceImpl extends ServiceImpl - implements SysLoginService { + implements SysLoginService, UserDetailsService { @Resource private PasswordEncoder passwordEncoder; @@ -46,4 +49,20 @@ public class SysLoginServiceImpl extends ServiceImpl return TokenUtil.generateToken(user.getUserId().toString()); } + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + // 查找用户 + SysUser user = this.getOne(Wrappers.lambdaQuery().eq(SysUser::getUserName, username)); + + //如果用户不存在,抛出用户未找到异常 + if (user == null) { + throw new UsernameNotFoundException("用户不存在"); + } + + + // 登录成功,生成Token + + // todo 返回UserDetail + return null; + } } diff --git a/src/main/java/com/bruce/sams/Service/impl/SysRoleServiceImpl.java b/src/main/java/com/bruce/sams/service/impl/SysRoleServiceImpl.java similarity index 69% rename from src/main/java/com/bruce/sams/Service/impl/SysRoleServiceImpl.java rename to src/main/java/com/bruce/sams/service/impl/SysRoleServiceImpl.java index 312eb274..a735d343 100644 --- a/src/main/java/com/bruce/sams/Service/impl/SysRoleServiceImpl.java +++ b/src/main/java/com/bruce/sams/service/impl/SysRoleServiceImpl.java @@ -1,9 +1,9 @@ -package com.bruce.sams.Service.impl; +package com.bruce.sams.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.bruce.sams.Entity.SysRole; -import com.bruce.sams.Service.SysRoleService; -import com.bruce.sams.Mapper.SysRoleMapper; +import com.bruce.sams.domain.SysRole; +import com.bruce.sams.service.SysRoleService; +import com.bruce.sams.mapper.SysRoleMapper; import org.springframework.stereotype.Service; /** diff --git a/src/main/java/com/bruce/sams/Service/impl/SysUserServiceImpl.java b/src/main/java/com/bruce/sams/service/impl/SysUserServiceImpl.java similarity index 91% rename from src/main/java/com/bruce/sams/Service/impl/SysUserServiceImpl.java rename to src/main/java/com/bruce/sams/service/impl/SysUserServiceImpl.java index 1f2e8781..37229a82 100644 --- a/src/main/java/com/bruce/sams/Service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/bruce/sams/service/impl/SysUserServiceImpl.java @@ -1,12 +1,12 @@ -package com.bruce.sams.Service.impl; +package com.bruce.sams.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.bruce.sams.Entity.SysRole; -import com.bruce.sams.Entity.SysUser; -import com.bruce.sams.Mapper.SysRoleMapper; +import com.bruce.sams.domain.SysRole; +import com.bruce.sams.domain.SysUser; +import com.bruce.sams.mapper.SysRoleMapper; import com.bruce.sams.Utils.PasswordEncoder; -import com.bruce.sams.Service.SysUserService; -import com.bruce.sams.Mapper.SysUserMapper; +import com.bruce.sams.service.SysUserService; +import com.bruce.sams.mapper.SysUserMapper; import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index cbd9b118..4dad704a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,10 +1,26 @@ +server: + port: + spring: application: name: SAMS - datasource: - url: jdbc:mysql://localhost:3306/SAMS + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/SAMS_O username: root password: admin123 - driver-class-name: com.mysql.cj.jdbc.Driver + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + +mybatis-plus: + configuration: + # MyBatis 配置 + map-underscore-to-camel-case: true + global-config: + # 全局配置 + db-config: + # 数据库配置 + id-type: auto + mapper-locations: /mapper/*Mapper.xml diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 03256661..ed90cc79 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -1,44 +1,93 @@ - - - - System.out + + + + + + + - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c [%thread] : %msg%n + ${log.pattern} - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - utf-8 - - - /log/itheima-data.log - - - - /log/itheima-data2-%d{yyyy-MMdd}.log%i.gz - - 1MB + + + ${log.path}/sys-info.log + + + + ${log.path}/sys-info.%d{yyyy-MM-dd}.log + + 60 + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + - + + + ${log.path}/sys-error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + - level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF - , 默认debug - 可以包含零个或多个元素,标识这个输出位置将会被本日志级别控制。 - --> - - - + + + ${log.path}/sys-user.log + + + ${log.path}/sys-user.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/bruce/sams/Mapper/SysRoleMapper.xml b/src/main/resources/mapper/SysRoleMapper.xml similarity index 91% rename from src/main/resources/com/bruce/sams/Mapper/SysRoleMapper.xml rename to src/main/resources/mapper/SysRoleMapper.xml index 1d712927..da427987 100644 --- a/src/main/resources/com/bruce/sams/Mapper/SysRoleMapper.xml +++ b/src/main/resources/mapper/SysRoleMapper.xml @@ -4,7 +4,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + diff --git a/src/main/resources/com/bruce/sams/Mapper/SysUserMapper.xml b/src/main/resources/mapper/SysUserMapper.xml similarity index 94% rename from src/main/resources/com/bruce/sams/Mapper/SysUserMapper.xml rename to src/main/resources/mapper/SysUserMapper.xml index 5ae0c236..3aecca8e 100644 --- a/src/main/resources/com/bruce/sams/Mapper/SysUserMapper.xml +++ b/src/main/resources/mapper/SysUserMapper.xml @@ -4,7 +4,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - +