feat: auth模块初始化

This commit is contained in:
2025-11-28 23:36:41 +08:00
parent 3f31f3739e
commit 26a587f20b
25 changed files with 251 additions and 77 deletions

View File

@ -0,0 +1,65 @@
<?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-modules</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>dolphin-module-auth</artifactId>
<packaging>jar</packaging>
<dependencies>
<!-- 项目依赖 -->
<dependency>
<groupId>day.gitlab</groupId>
<artifactId>dolphin-common-security</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>day.gitlab</groupId>
<artifactId>dolphin-common-mybatis</artifactId>
<version>${project.version}</version>
</dependency>
<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-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- MyBatis Flex -->
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot3-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,25 @@
package day.gitlab.dolphin.auth.controller;
import day.gitlab.dolphin.auth.entity.dto.LoginDTO;
import day.gitlab.dolphin.auth.service.AuthService;
import day.gitlab.dolphin.common.core.entity.Result;
import day.gitlab.dolphin.common.security.annotation.AuthorityIgnore;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/auth")
public class AuthController {
@Resource
private AuthService authService;
@AuthorityIgnore
@PostMapping("/login")
public Result login(@RequestBody LoginDTO loginDTO) {
return Result.success(authService.login(loginDTO));
}
}

View File

@ -0,0 +1,14 @@
package day.gitlab.dolphin.auth.entity.dto;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Data
public class LoginDTO {
@NotNull
private String username;
@NotNull
private String password;
}

View File

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

View File

@ -0,0 +1,9 @@
package day.gitlab.dolphin.auth.service;
import day.gitlab.dolphin.auth.entity.dto.LoginDTO;
import day.gitlab.dolphin.auth.entity.vo.LoginVO;
public interface AuthService {
LoginVO login(LoginDTO loginDTO);
}

View File

@ -0,0 +1,69 @@
package day.gitlab.dolphin.auth.service.impl;
import cn.hutool.v7.crypto.digest.BCrypt;
import day.gitlab.dolphin.auth.entity.dto.LoginDTO;
import day.gitlab.dolphin.auth.entity.vo.LoginVO;
import day.gitlab.dolphin.auth.service.AuthService;
import day.gitlab.dolphin.common.core.exception.BusinessException;
import day.gitlab.dolphin.common.security.AuthenticationProvider;
import day.gitlab.dolphin.common.security.UserPrincipal;
import day.gitlab.dolphin.common.security.jwt.JwtInfo;
import day.gitlab.dolphin.rbac.constants.UserEnabled;
import day.gitlab.dolphin.rbac.entity.Role;
import day.gitlab.dolphin.rbac.entity.User;
import day.gitlab.dolphin.rbac.mapper.UserMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class AuthServiceImpl implements AuthService, AuthenticationProvider {
@Resource
private UserMapper userMapper;
@Resource
private JwtInfo jwtInfo;
@Override
public LoginVO login(LoginDTO loginDTO) {
User dbUser = userMapper.findByUsername(loginDTO.getUsername());
if (dbUser == null || !BCrypt.checkpw(loginDTO.getPassword(), dbUser.getPassword())) {
throw new BusinessException("Username or password is incorrect");
}
if (!UserEnabled.ENABLED.equals(dbUser.getEnabled())) {
throw new BusinessException("User is not enabled");
}
return LoginVO.builder()
.accessToken(jwtInfo.generateAccessToken(dbUser.getId()))
.refreshToken(jwtInfo.generateRefreshToken(dbUser.getId()))
.build();
}
@Override
public UserPrincipal getUserPrincipal(String userId) {
User user = userMapper.selectOneById(userId);
return UserPrincipal.builder()
.id(user.getId())
.username(user.getUsername())
.nickname(user.getNickname())
.build();
}
@Override
public List<String> getUserAuthorities(String userId) {
User user = userMapper.selectOneWithRelationsById(userId);
List<Role> roles = user.getRoles();
if (roles == null || roles.isEmpty()) {
return Collections.emptyList();
}
return roles.stream().map(Role::getCode).collect(Collectors.toList());
}
}