mirror of
https://gitee.com/xtoon/xtoon-cloud.git
synced 2026-07-13 16:58:02 +00:00
通用模块开发
This commit is contained in:
@@ -72,11 +72,11 @@ public interface AuthConstants {
|
||||
*/
|
||||
String BCRYPT = "{bcrypt}";
|
||||
|
||||
String USER_ID_KEY = "user_id";
|
||||
String USER_ID_KEY = "userId";
|
||||
|
||||
String USER_NAME_KEY = "userName";
|
||||
|
||||
String CLIENT_ID_KEY = "client_id";
|
||||
String TENANT_ID_KEY = "tenantId";
|
||||
|
||||
/**
|
||||
* JWT存储权限前缀
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||
com.xtoon.cloud.common.web.util.BaseExceptionHandler
|
||||
com.xtoon.cloud.common.web.util.BaseExceptionHandler
|
||||
@@ -113,6 +113,7 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap
|
||||
User user = (User) authentication.getUserAuthentication().getPrincipal();
|
||||
map.put(AuthConstants.USER_ID_KEY, user.getId());
|
||||
map.put(AuthConstants.USER_NAME_KEY, user.getUsername());
|
||||
map.put(AuthConstants.TENANT_ID_KEY, user.getTenantId());
|
||||
((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(map);
|
||||
return accessToken;
|
||||
};
|
||||
|
||||
@@ -28,7 +28,7 @@ public class User implements UserDetails {
|
||||
|
||||
private Boolean enabled;
|
||||
|
||||
private String clientId;
|
||||
private String tenantId;
|
||||
|
||||
private Collection<GrantedAuthority> authorities;
|
||||
|
||||
@@ -37,6 +37,7 @@ public class User implements UserDetails {
|
||||
this.setUsername(authenticationDTO.getUserName());
|
||||
this.setPassword(AuthConstants.BCRYPT + authenticationDTO.getPassword());
|
||||
this.setEnabled(StatusEnum.ENABLE.getValue().equals(authenticationDTO.getStatus()));
|
||||
this.setTenantId(authenticationDTO.getTenantId());
|
||||
this.authorities = AuthorityUtils.commaSeparatedStringToAuthorityList(StringUtils.join(authenticationDTO.getPermissionCodes(), ","));
|
||||
}
|
||||
|
||||
|
||||
@@ -44,8 +44,9 @@ public class CaptchaFilter extends OncePerRequestFilter {
|
||||
httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE);
|
||||
httpServletResponse.setStatus(HttpServletResponse.SC_OK);
|
||||
httpServletResponse.getOutputStream().write(JSONObject.toJSONString(Result.error("验证码不正确")).getBytes());
|
||||
} else {
|
||||
filterChain.doFilter(httpServletRequest, httpServletResponse);
|
||||
}
|
||||
filterChain.doFilter(httpServletRequest, httpServletResponse);
|
||||
} else {
|
||||
filterChain.doFilter(httpServletRequest, httpServletResponse);
|
||||
}
|
||||
|
||||
@@ -58,10 +58,10 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered {
|
||||
}
|
||||
|
||||
// 存在token且不是黑名单,request写入JWT的载体信息
|
||||
String tenantId = request.getHeaders().getFirst(CommonConstant.TENANT_ID);
|
||||
// String tenantId = request.getHeaders().getFirst(CommonConstant.TENANT_ID);
|
||||
request = exchange.getRequest().mutate()
|
||||
.header(AuthConstants.JWT_PAYLOAD_KEY, payload)
|
||||
.header(CommonConstant.TENANT_ID, tenantId)
|
||||
// .header(CommonConstant.TENANT_ID, tenantId)
|
||||
.build();
|
||||
exchange = exchange.mutate().request(request).build();
|
||||
return chain.filter(exchange);
|
||||
|
||||
@@ -34,6 +34,11 @@ public class AuthenticationDTO implements Serializable {
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 租户ID
|
||||
*/
|
||||
private String tenantId;
|
||||
|
||||
/**
|
||||
* 权限编码
|
||||
*/
|
||||
|
||||
@@ -84,5 +84,28 @@
|
||||
<artifactId>dubbo</artifactId>
|
||||
<version>2.7.8</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-api</artifactId>
|
||||
<version>RELEASE</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>src/main/java</directory>
|
||||
<includes>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
<include>**/*.ftl</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
</project>
|
||||
@@ -11,6 +11,7 @@ import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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;
|
||||
|
||||
/**
|
||||
@@ -21,6 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
**/
|
||||
@Api(tags = "注册")
|
||||
@RestController
|
||||
@RequestMapping("/register")
|
||||
public class RegisterController {
|
||||
|
||||
@Autowired
|
||||
@@ -31,7 +33,7 @@ public class RegisterController {
|
||||
*/
|
||||
@ApiOperation("注册租户")
|
||||
@SysLog("注册租户")
|
||||
@PostMapping("/registerTenant")
|
||||
@PostMapping("/tenant")
|
||||
public Result registerTenantAndUser(@RequestBody RegisterTenantCommand registerTenantCommand) {
|
||||
ValidatorUtils.validateEntity(registerTenantCommand, AddGroup.class);
|
||||
registerApplicationService.registerTenant(registerTenantCommand);
|
||||
|
||||
@@ -16,6 +16,7 @@ public class AuthenticationDTOAssembler {
|
||||
authenticationDTO.setUserId(user.getUserId().getId());
|
||||
authenticationDTO.setUserName(user.getUserName().getName());
|
||||
authenticationDTO.setPassword(user.getAccount().getPassword().getPassword());
|
||||
authenticationDTO.setTenantId(user.getTenantId().getId());
|
||||
authenticationDTO.setStatus(user.getStatus().getValue());
|
||||
return authenticationDTO;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package com.xtoon.cloud.sys.application.impl;
|
||||
|
||||
import com.google.code.kaptcha.Producer;
|
||||
import com.xtoon.cloud.sys.application.PermissionQueryService;
|
||||
import com.xtoon.cloud.sys.application.assembler.AuthenticationDTOAssembler;
|
||||
import com.xtoon.cloud.sys.domain.model.captcha.Captcha;
|
||||
import com.xtoon.cloud.sys.domain.model.captcha.CaptchaCode;
|
||||
import com.xtoon.cloud.sys.domain.model.captcha.CaptchaRepository;
|
||||
import com.xtoon.cloud.sys.domain.model.captcha.Uuid;
|
||||
@@ -14,11 +12,9 @@ import com.xtoon.cloud.sys.domain.service.CaptchaValidateService;
|
||||
import com.xtoon.cloud.sys.dto.AuthenticationDTO;
|
||||
import com.xtoon.cloud.sys.service.AuthenticationService;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.dubbo.config.annotation.DubboService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -27,7 +23,7 @@ import java.util.List;
|
||||
* @author haoxin
|
||||
* @date 2021-05-10
|
||||
**/
|
||||
@Service
|
||||
@DubboService
|
||||
public class AuthenticationServiceImpl implements AuthenticationService {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.xtoon.cloud.sys.infrastructure.persistence.mapper.SysPermissionMapper">
|
||||
|
||||
<select id="queryList" parameterType="Map" resultType="com.xtoon.boot.sys.infrastructure.persistence.entity.SysPermissionDO">
|
||||
<select id="queryList" parameterType="Map" resultType="com.xtoon.cloud.sys.infrastructure.persistence.entity.SysPermissionDO">
|
||||
select p.* from sys_permission p
|
||||
<where>
|
||||
and p.del_flag = '0'
|
||||
@@ -13,20 +13,20 @@
|
||||
order by p.order_num asc
|
||||
</select>
|
||||
|
||||
<select id="queryPermissionByRoleId" resultType="com.xtoon.boot.sys.infrastructure.persistence.entity.SysPermissionDO">
|
||||
<select id="queryPermissionByRoleId" resultType="com.xtoon.cloud.sys.infrastructure.persistence.entity.SysPermissionDO">
|
||||
select p.* from sys_role_permission rp
|
||||
LEFT JOIN sys_permission p on rp.permission_id = p.id
|
||||
where rp.role_id = #{roleId} and p.del_flag = '0' and p.status = '0'
|
||||
</select>
|
||||
|
||||
<select id="queryPermissionByRoleCode" resultType="com.xtoon.boot.sys.infrastructure.persistence.entity.SysPermissionDO">
|
||||
<select id="queryPermissionByRoleCode" resultType="com.xtoon.cloud.sys.infrastructure.persistence.entity.SysPermissionDO">
|
||||
select p.* from sys_role_permission rp
|
||||
LEFT JOIN sys_permission p on rp.permission_id = p.id
|
||||
LEFT JOIN sys_role r on r.id = rp.role_id
|
||||
where r.role_code = #{roleId} and p.del_flag = '0' and p.status = '0'
|
||||
</select>
|
||||
|
||||
<select id="queryPermissionByUserId" resultType="com.xtoon.boot.sys.infrastructure.persistence.entity.SysPermissionDO">
|
||||
<select id="queryPermissionByUserId" resultType="com.xtoon.cloud.sys.infrastructure.persistence.entity.SysPermissionDO">
|
||||
SELECT p.* FROM sys_role_permission rp
|
||||
LEFT JOIN sys_permission p ON rp.permission_id = p.id
|
||||
LEFT JOIN sys_user_role ur ON rp.role_id = ur.role_id
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.xtoon.cloud.sys.infrastructure.persistence.mapper.SysRoleMapper">
|
||||
|
||||
<select id="queryList" parameterType="Map" resultType="com.xtoon.boot.sys.infrastructure.persistence.entity.SysRoleDO">
|
||||
<select id="queryList" parameterType="Map" resultType="com.xtoon.cloud.sys.infrastructure.persistence.entity.SysRoleDO">
|
||||
select r.* from sys_role r
|
||||
<where>
|
||||
and r.del_flag = '0'
|
||||
@@ -13,7 +13,7 @@
|
||||
ORDER BY r.id desc
|
||||
</select>
|
||||
|
||||
<select id="queryUserRole" resultType="com.xtoon.boot.sys.infrastructure.persistence.entity.SysRoleDO">
|
||||
<select id="queryUserRole" resultType="com.xtoon.cloud.sys.infrastructure.persistence.entity.SysRoleDO">
|
||||
select r.* from sys_role r
|
||||
INNER JOIN sys_user_role ur on ur.role_id = r.id
|
||||
where ur.user_id = #{userId} and r.del_flag = '0' and r.status = '0'
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.xtoon.cloud.sys.infrastructure.persistence.mapper.SysTenantMapper">
|
||||
|
||||
<select id="queryPage" parameterType="Map" resultType="com.xtoon.boot.sys.infrastructure.persistence.entity.SysTenantDO">
|
||||
<select id="queryPage" parameterType="Map" resultType="com.xtoon.cloud.sys.infrastructure.persistence.entity.SysTenantDO">
|
||||
SELECT
|
||||
t.*
|
||||
FROM
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<mapper namespace="com.xtoon.cloud.sys.infrastructure.persistence.mapper.SysUserMapper">
|
||||
|
||||
<select id="queryPage" parameterType="Map"
|
||||
resultType="com.xtoon.boot.sys.infrastructure.persistence.entity.SysUserDO">
|
||||
resultType="com.xtoon.cloud.sys.infrastructure.persistence.entity.SysUserDO">
|
||||
SELECT
|
||||
u.*,a.email,a.mobile
|
||||
FROM
|
||||
@@ -27,7 +27,7 @@
|
||||
</select>
|
||||
|
||||
<select id="queryUser" parameterType="Map"
|
||||
resultType="com.xtoon.boot.sys.infrastructure.persistence.entity.SysUserDO">
|
||||
resultType="com.xtoon.cloud.sys.infrastructure.persistence.entity.SysUserDO">
|
||||
SELECT
|
||||
u.*,t.tenant_code,t.tenant_name
|
||||
FROM
|
||||
@@ -46,7 +46,7 @@
|
||||
</select>
|
||||
|
||||
<select id="queryUserNoTenant" parameterType="Map"
|
||||
resultType="com.xtoon.boot.sys.infrastructure.persistence.entity.SysUserDO">
|
||||
resultType="com.xtoon.cloud.sys.infrastructure.persistence.entity.SysUserDO">
|
||||
SELECT
|
||||
u.*,t.tenant_code,t.tenant_name
|
||||
FROM
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<include resource="org/springframework/boot/logging/logback/base.xml" />
|
||||
|
||||
<!-- 开发、测试环境 -->
|
||||
<springProfile name="dev">
|
||||
<logger name="org.springframework.web" level="INFO"/>
|
||||
<logger name="org.springboot.sample" level="INFO" />
|
||||
<logger name="com.xtoon" level="DEBUG" />
|
||||
</springProfile>
|
||||
|
||||
<springProfile name="test,prod">
|
||||
<appender name="STDOUT"
|
||||
class="ch.qos.logback.core.ConsoleAppender">
|
||||
<!--定义了一个过滤器,在LEVEL之下的日志输出不会被打印出来-->
|
||||
<!--这里定义了ERROR,也就是控制台不会输出比ERROR级别小的日志-->
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>ERROR</level>
|
||||
</filter>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<Pattern>%d{HH:mm:ss.SSS} %-5level %logger{80} - %msg%n</Pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="xtoon-web"
|
||||
class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<append>true</append>
|
||||
<file>
|
||||
/var/logs/xtoon/xtoon_web.log
|
||||
</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<FileNamePattern>/var/logs/xtoon/xtoon_web.log.%d{yyyy-MM-dd}</FileNamePattern>
|
||||
<MaxHistory>30</MaxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="xtoon-error"
|
||||
class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<append>true</append>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>ERROR</level>
|
||||
</filter>
|
||||
<file>
|
||||
/var/logs/xtoon/xtoon_error.log
|
||||
</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<FileNamePattern>/var/logs/xtoon/xtoon_error.log.%d{yyyy-MM-dd}</FileNamePattern>
|
||||
<MaxHistory>30</MaxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!--root是默认的logger 这里设定输出级别是DEBUG-->
|
||||
<root level="ERROR">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</root>
|
||||
<!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
|
||||
<logger name="org.springframework.web" level="INFO"/>
|
||||
<logger name="org.springboot.sample" level="INFO" />
|
||||
<logger name="com.xtoon" level="INFO" additivity="false">
|
||||
<appender-ref ref="xtoon-web"/>
|
||||
<appender-ref ref="xtoon-error"/>
|
||||
</logger>
|
||||
</springProfile>
|
||||
|
||||
</configuration>
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.xtoon.cloud.sys.domain.model.user;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* 密码测试
|
||||
*
|
||||
* @author haoxin
|
||||
* @date 2021-06-23
|
||||
**/
|
||||
public class PasswordTest {
|
||||
|
||||
@Test
|
||||
public void create() {
|
||||
System.out.println(Password.create("123456"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user