feat: 项目结构重构

This commit is contained in:
2025-12-04 19:57:13 +08:00
parent 39d0086dfe
commit d25a1467e0
118 changed files with 1429 additions and 2580 deletions

52
dolphin-authorize/pom.xml Normal file
View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>day.gitlab</groupId>
<artifactId>dolphin-backend</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>dolphin-authorize</artifactId>
<packaging>jar</packaging>
<dependencies>
<!-- Project -->
<dependency>
<groupId>day.gitlab</groupId>
<artifactId>dolphin-module-rbac</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot4-starter</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,8 @@
package day.gitlab.dolphin.authorize.constants;
public class Exceptions {
public static final String USERNAME_OR_PASSWORD_INCORRECT = "00010101";
public static final String USER_NOT_ENABLED = "00010102";
}

View File

@ -0,0 +1,29 @@
package day.gitlab.dolphin.authorize.controller;
import day.gitlab.dolphin.authorize.controller.dto.LoginDTO;
import day.gitlab.dolphin.authorize.controller.vo.TokenPair;
import day.gitlab.dolphin.authorize.controller.vo.UserInfoVO;
import day.gitlab.dolphin.authorize.service.AuthorizeService;
import day.gitlab.dolphin.common.security.annotation.AuthorityIgnore;
import day.gitlab.dolphin.common.web.entity.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@RestController
@RequiredArgsConstructor
@RequestMapping("/authorize")
public class AuthorizeController {
private final AuthorizeService authorizeService;
@AuthorityIgnore
@PostMapping("/login")
public ApiResponse<TokenPair> login(@RequestBody LoginDTO loginDTO) {
return ApiResponse.success(authorizeService.login(loginDTO));
}
@GetMapping("/getUserInfo")
public ApiResponse<UserInfoVO> getUserInfo() {
return ApiResponse.success(authorizeService.getUserInfo());
}
}

View File

@ -0,0 +1,11 @@
package day.gitlab.dolphin.authorize.controller.dto;
import lombok.Data;
@Data
public class LoginDTO {
private String username;
private String password;
}

View File

@ -0,0 +1,17 @@
package day.gitlab.dolphin.authorize.controller.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TokenPair {
private String accessToken;
private String refreshToken;
}

View File

@ -0,0 +1,21 @@
package day.gitlab.dolphin.authorize.controller.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserInfoVO {
private String id;
private String username;
private List<String> authorities;
}

View File

@ -0,0 +1,12 @@
package day.gitlab.dolphin.authorize.service;
import day.gitlab.dolphin.authorize.controller.dto.LoginDTO;
import day.gitlab.dolphin.authorize.controller.vo.TokenPair;
import day.gitlab.dolphin.authorize.controller.vo.UserInfoVO;
public interface AuthorizeService {
TokenPair login(LoginDTO loginDTO);
UserInfoVO getUserInfo();
}

View File

@ -0,0 +1,39 @@
package day.gitlab.dolphin.authorize.service.impl;
import day.gitlab.dolphin.common.security.AuthenticationProvider;
import day.gitlab.dolphin.common.security.UserPrincipal;
import day.gitlab.dolphin.module.rbac.entity.Role;
import day.gitlab.dolphin.module.rbac.entity.User;
import day.gitlab.dolphin.module.rbac.mapper.RoleMapper;
import day.gitlab.dolphin.module.rbac.mapper.UserMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
@Service
@RequiredArgsConstructor
public class AuthorizationProviderImpl implements AuthenticationProvider {
private final UserMapper userMapper;
private final RoleMapper roleMapper;
@Override
public UserPrincipal getUserPrincipal(String userId) {
User user = userMapper.selectById(userId);
Objects.requireNonNull(user);
return UserPrincipal.builder()
.id(user.getId())
.username(user.getUsername())
.nickname(user.getNickname())
.build();
}
@Override
public List<String> getUserAuthorities(String userId) {
List<Role> roles = roleMapper.findAllByUserId(userId);
return roles.stream().map(Role::getCode).toList();
}
}

View File

@ -0,0 +1,54 @@
package day.gitlab.dolphin.authorize.service.impl;
import day.gitlab.dolphin.authorize.constants.Exceptions;
import day.gitlab.dolphin.authorize.controller.dto.LoginDTO;
import day.gitlab.dolphin.authorize.controller.vo.TokenPair;
import day.gitlab.dolphin.authorize.controller.vo.UserInfoVO;
import day.gitlab.dolphin.authorize.service.AuthorizeService;
import day.gitlab.dolphin.common.core.util.BCrypt;
import day.gitlab.dolphin.common.security.Authentication;
import day.gitlab.dolphin.common.security.SecurityContextHolder;
import day.gitlab.dolphin.common.security.jwt.JwtInfo;
import day.gitlab.dolphin.common.web.i18n.MessagesHelper;
import day.gitlab.dolphin.module.rbac.entity.User;
import day.gitlab.dolphin.module.rbac.enums.UserEnabled;
import day.gitlab.dolphin.module.rbac.mapper.UserMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class AuthorizeServiceImpl implements AuthorizeService {
private final JwtInfo jwtInfo;
private final UserMapper userMapper;
private final MessagesHelper messagesHelper;
@Override
public TokenPair login(LoginDTO loginDTO) {
User dbUser = userMapper.findByUsername(loginDTO.getUsername());
if (dbUser == null || !BCrypt.checkpw(loginDTO.getPassword(), dbUser.getPassword())) {
throw messagesHelper.newBusinessException(Exceptions.USERNAME_OR_PASSWORD_INCORRECT);
}
if (!UserEnabled.ENABLED.equals(dbUser.getEnabled())) {
throw messagesHelper.newBusinessException(Exceptions.USER_NOT_ENABLED);
}
return TokenPair.builder()
.accessToken(jwtInfo.generateAccessToken(dbUser.getId()))
.refreshToken(jwtInfo.generateRefreshToken(dbUser.getId()))
.build();
}
@Override
public UserInfoVO getUserInfo() {
Authentication authentication = SecurityContextHolder.getAuthentication();
return UserInfoVO.builder()
.id(authentication.getUserPrincipal().getId())
.username(authentication.getUserPrincipal().getNickname())
.authorities(authentication.getUserAuthorities())
.build();
}
}