saas
This commit is contained in:
parent
58f358e038
commit
54c0542870
|
@ -23,6 +23,7 @@ import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -54,6 +55,8 @@ public class WebLogAspect {
|
||||||
StringBuffer urlBuf = request.getRequestURL();
|
StringBuffer urlBuf = request.getRequestURL();
|
||||||
URL url = new URL(urlBuf.toString());
|
URL url = new URL(urlBuf.toString());
|
||||||
String path = url.getPath();
|
String path = url.getPath();
|
||||||
|
log.info("获取请求地址:" + path);
|
||||||
|
log.info("获取请求ip:" + getIPAddress(request));
|
||||||
HttpServletResponse response = (HttpServletResponse)attributes.getResponse();
|
HttpServletResponse response = (HttpServletResponse)attributes.getResponse();
|
||||||
String hospitalHost = request.getHeader("hospitalHost");
|
String hospitalHost = request.getHeader("hospitalHost");
|
||||||
// if(StringUtils.isEmpty(hospitalHost)){
|
// if(StringUtils.isEmpty(hospitalHost)){
|
||||||
|
@ -72,6 +75,11 @@ public class WebLogAspect {
|
||||||
HspHostUtil.switchDB(hospitalHost,"admin",stringRedisTemplate);
|
HspHostUtil.switchDB(hospitalHost,"admin",stringRedisTemplate);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
public String getIPAddress(HttpServletRequest request) {
|
||||||
|
String ipAddress = request.getRemoteAddr();
|
||||||
|
return ipAddress;
|
||||||
|
}
|
||||||
|
|
||||||
//执行完切面后,将线程共享中的数据源名称清空
|
//执行完切面后,将线程共享中的数据源名称清空
|
||||||
@After("webLog()")
|
@After("webLog()")
|
||||||
public void after(JoinPoint joinPoint){
|
public void after(JoinPoint joinPoint){
|
||||||
|
|
|
@ -2,17 +2,22 @@ package com.recovery.admin.boot.config;
|
||||||
|
|
||||||
|
|
||||||
import com.recovery.admin.boot.interceptor.JwtInterceptor;
|
import com.recovery.admin.boot.interceptor.JwtInterceptor;
|
||||||
|
import com.recovery.common.base.util.RedisUtil;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class InterceptConfig implements WebMvcConfigurer {
|
public class InterceptConfig implements WebMvcConfigurer {
|
||||||
|
@Resource
|
||||||
|
RedisUtil redisUtil;
|
||||||
@Override
|
@Override
|
||||||
public void addInterceptors(InterceptorRegistry registry) {
|
public void addInterceptors(InterceptorRegistry registry) {
|
||||||
//添加拦截器
|
//添加拦截器
|
||||||
registry.addInterceptor(new JwtInterceptor())
|
registry.addInterceptor(new JwtInterceptor(redisUtil))
|
||||||
//拦截的路径 需要进行token验证的路径
|
//拦截的路径 需要进行token验证的路径
|
||||||
.addPathPatterns("/**")
|
.addPathPatterns("/**")
|
||||||
//放行的路径
|
//放行的路径
|
||||||
|
|
|
@ -71,6 +71,7 @@ public class RequestWrapper extends HttpServletRequestWrapper {
|
||||||
StringBuffer urlBuf = req.getRequestURL();
|
StringBuffer urlBuf = req.getRequestURL();
|
||||||
try {
|
try {
|
||||||
logger.info("获取请求地址:" + new URL(urlBuf.toString()).getPath());
|
logger.info("获取请求地址:" + new URL(urlBuf.toString()).getPath());
|
||||||
|
logger.info("获取请求ip:" + getIPAddress(req));
|
||||||
} catch (MalformedURLException e) {
|
} catch (MalformedURLException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
@ -78,6 +79,12 @@ public class RequestWrapper extends HttpServletRequestWrapper {
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getIPAddress(HttpServletRequest request) {
|
||||||
|
String ipAddress = request.getRemoteAddr();
|
||||||
|
return ipAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @date: 2023/2/6 12:46
|
* @date: 2023/2/6 12:46
|
||||||
* @author: zhouzhaodong
|
* @author: zhouzhaodong
|
||||||
|
|
|
@ -8,6 +8,7 @@ import com.recovery.admin.boot.exception.BusinessException;
|
||||||
import com.recovery.admin.boot.filter.RequestWrapper;
|
import com.recovery.admin.boot.filter.RequestWrapper;
|
||||||
import com.recovery.common.base.constant.Constants;
|
import com.recovery.common.base.constant.Constants;
|
||||||
import com.recovery.common.base.result.ResultCode;
|
import com.recovery.common.base.result.ResultCode;
|
||||||
|
import com.recovery.common.base.util.RedisUtil;
|
||||||
import com.recovery.common.base.utils.JwtUtils;
|
import com.recovery.common.base.utils.JwtUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@ -15,6 +16,7 @@ import org.springframework.util.StringUtils;
|
||||||
import org.springframework.web.servlet.HandlerInterceptor;
|
import org.springframework.web.servlet.HandlerInterceptor;
|
||||||
import org.springframework.web.servlet.ModelAndView;
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -23,18 +25,29 @@ import java.util.HashMap;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class JwtInterceptor implements HandlerInterceptor {
|
public class JwtInterceptor implements HandlerInterceptor {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
RedisUtil redisUtil;
|
||||||
|
|
||||||
|
public JwtInterceptor(RedisUtil redisUtil) {
|
||||||
|
this.redisUtil = redisUtil;
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||||
HashMap<String, String> map=new HashMap<>();
|
HashMap<String, String> map=new HashMap<>();
|
||||||
//获取请求参数
|
// //获取请求参数
|
||||||
RequestWrapper requestWrapper = new RequestWrapper(request);
|
// RequestWrapper requestWrapper = new RequestWrapper(request);
|
||||||
//这里getBodyString()方法无参数
|
// //这里getBodyString()方法无参数
|
||||||
log.info("RequestBody: {}", requestWrapper.getBodyString());
|
// log.info("RequestBody: {}", requestWrapper.getBodyString());
|
||||||
//从http请求头获取token
|
//从http请求头获取token
|
||||||
|
|
||||||
String token = requestWrapper.getHeader(Constants.LOGIN_USRE_TOKEN);
|
String token = request.getHeader(Constants.LOGIN_USRE_TOKEN);
|
||||||
if (StringUtils.isEmpty(token)) {
|
if (StringUtils.isEmpty(token)) {
|
||||||
throw new BusinessException(ResultCode.TOKEN_INVALID_OR_EXPIRED);
|
throw new BusinessException(ResultCode.LOGIN_ERROR);
|
||||||
|
}
|
||||||
|
boolean rest = redisUtil.hasKey("userToken:" +token);
|
||||||
|
if (!rest) {
|
||||||
|
throw new BusinessException(ResultCode.LOGIN_EXPIRE_ERROR);
|
||||||
}
|
}
|
||||||
//把变量放在request请求域中,仅可以被这次请求,即同一个requerst使用
|
//把变量放在request请求域中,仅可以被这次请求,即同一个requerst使用
|
||||||
request.setAttribute(Constants.LOGIN_USRE_TOKEN,token);
|
request.setAttribute(Constants.LOGIN_USRE_TOKEN,token);
|
||||||
|
|
|
@ -48,8 +48,8 @@ public class AuthController {
|
||||||
|
|
||||||
// @GetMapping("/public-key")
|
// @GetMapping("/public-key")
|
||||||
// public Map<String, Object> getPublicKey() {
|
// public Map<String, Object> getPublicKey() {
|
||||||
// RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
|
// //单例模式
|
||||||
// RSAKey key = new RSAKey.Builder(publicKey).build();
|
//
|
||||||
// return new JWKSet(key).toJSONObject();
|
// return “吃啥;
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,9 @@ import java.io.Serializable;
|
||||||
public enum ResultCode implements IResultCode, Serializable {
|
public enum ResultCode implements IResultCode, Serializable {
|
||||||
|
|
||||||
SUCCESS("200", "成功"),
|
SUCCESS("200", "成功"),
|
||||||
|
LOGIN_ERROR("1001", "未登录"),
|
||||||
|
|
||||||
|
LOGIN_EXPIRE_ERROR("1002", "登录过期,请重新登录!"),
|
||||||
SYSTEM_EXECUTION_ERROR("999999", "系统执行出错"),
|
SYSTEM_EXECUTION_ERROR("999999", "系统执行出错"),
|
||||||
USERNAME_OR_PASSWORD_ERROR("A00100", "用户名或密码错误"),
|
USERNAME_OR_PASSWORD_ERROR("A00100", "用户名或密码错误"),
|
||||||
USER_NOT_EXIST("A00101", "用户不存在"),
|
USER_NOT_EXIST("A00101", "用户不存在"),
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
package com.recovery.order.aspect;
|
||||||
|
|
||||||
|
|
||||||
|
import com.recovery.common.base.ds.DataSourceContextHolder;
|
||||||
|
import com.recovery.common.base.util.HspHostUtil;
|
||||||
|
import com.recovery.common.base.utils.RedisUtils;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.aspectj.lang.JoinPoint;
|
||||||
|
import org.aspectj.lang.annotation.After;
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
import org.aspectj.lang.annotation.Before;
|
||||||
|
import org.aspectj.lang.annotation.Pointcut;
|
||||||
|
import org.springframework.core.annotation.Order;
|
||||||
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Web层日志切面
|
||||||
|
*
|
||||||
|
* @author RyanWang
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 16/5/17 上午10:42.
|
||||||
|
*/
|
||||||
|
@Aspect
|
||||||
|
@Order(0)
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class WebLogAspect {
|
||||||
|
@Resource
|
||||||
|
private StringRedisTemplate stringRedisTemplate;
|
||||||
|
//
|
||||||
|
@Pointcut("execution(public * com.recovery.order.controller..*.*(..)) || execution(public * com.recovery.order.rest.*.*(..))")
|
||||||
|
public void webLog(){}
|
||||||
|
|
||||||
|
@Before("webLog()")
|
||||||
|
public void doBefore(JoinPoint joinPoint) throws Throwable {
|
||||||
|
|
||||||
|
// 接收到请求,记录请求内容
|
||||||
|
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||||
|
//获取请求的域名
|
||||||
|
HttpServletRequest request = attributes.getRequest();
|
||||||
|
// 根据域名获取网站信息
|
||||||
|
StringBuffer urlBuf = request.getRequestURL();
|
||||||
|
URL url = new URL(urlBuf.toString());
|
||||||
|
String path = url.getPath();
|
||||||
|
log.info("获取请求地址:" + path);
|
||||||
|
log.info("获取请求ip:" + getIPAddress(request));
|
||||||
|
HttpServletResponse response = (HttpServletResponse)attributes.getResponse();
|
||||||
|
String hospitalHost = request.getHeader("hospitalHost");
|
||||||
|
// if(StringUtils.isEmpty(hospitalHost)){
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
//切割获取访问目标模块
|
||||||
|
String[] split = path.split("/");
|
||||||
|
String module = split[0];
|
||||||
|
log.info("切换库:"+RedisUtils.getDBInfoByHostAndModule(stringRedisTemplate,hospitalHost,"order"));
|
||||||
|
//根据域名和请求的模块名查询目标数据库
|
||||||
|
HttpSession session = request.getSession();
|
||||||
|
/**
|
||||||
|
* 切换为动态数据源实例
|
||||||
|
*/
|
||||||
|
HspHostUtil.switchDB(hospitalHost,"order",stringRedisTemplate);
|
||||||
|
|
||||||
|
}
|
||||||
|
public String getIPAddress(HttpServletRequest request) {
|
||||||
|
String ipAddress = request.getRemoteAddr();
|
||||||
|
return ipAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
//执行完切面后,将线程共享中的数据源名称清空
|
||||||
|
@After("webLog()")
|
||||||
|
public void after(JoinPoint joinPoint){
|
||||||
|
DataSourceContextHolder.clearDBType();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
package com.recovery.order.config;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.web.cors.CorsConfiguration;
|
||||||
|
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
||||||
|
import org.springframework.web.filter.CorsFilter;
|
||||||
|
|
||||||
|
//跨越请求配置类
|
||||||
|
@Configuration
|
||||||
|
public class CorsConfig {
|
||||||
|
|
||||||
|
private CorsConfiguration buildConfig() {
|
||||||
|
CorsConfiguration corsConfiguration = new CorsConfiguration();
|
||||||
|
// 你需要跨域的地址 注意这里的 127.0.0.1 != localhost
|
||||||
|
// * 表示对所有的地址都可以访问
|
||||||
|
corsConfiguration.addAllowedOrigin("*"); // 1
|
||||||
|
// 跨域的请求头
|
||||||
|
corsConfiguration.addAllowedHeader("*"); // 2
|
||||||
|
// 跨域的请求方法
|
||||||
|
corsConfiguration.addAllowedMethod("*"); // 3
|
||||||
|
//加上了这一句,大致意思是可以携带 cookie
|
||||||
|
//最终的结果是可以 在跨域请求的时候获取同一个 session
|
||||||
|
corsConfiguration.setAllowCredentials(true);
|
||||||
|
return corsConfiguration;
|
||||||
|
}
|
||||||
|
@Bean
|
||||||
|
public CorsFilter corsFilter() {
|
||||||
|
|
||||||
|
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
|
||||||
|
//配置 可以访问的地址
|
||||||
|
source.registerCorsConfiguration("/**", buildConfig());
|
||||||
|
return new CorsFilter(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.recovery.order.config;
|
||||||
|
|
||||||
|
|
||||||
|
import com.recovery.admin.boot.interceptor.JwtInterceptor;
|
||||||
|
import com.recovery.common.base.util.RedisUtil;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||||
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class InterceptConfig implements WebMvcConfigurer {
|
||||||
|
@Resource
|
||||||
|
RedisUtil redisUtil;
|
||||||
|
@Override
|
||||||
|
public void addInterceptors(InterceptorRegistry registry) {
|
||||||
|
//添加拦截器
|
||||||
|
registry.addInterceptor(new JwtInterceptor(redisUtil))
|
||||||
|
//拦截的路径 需要进行token验证的路径
|
||||||
|
.addPathPatterns("/**")
|
||||||
|
//放行的路径
|
||||||
|
.excludePathPatterns("/api/rest/users/getUserByUsername")
|
||||||
|
.excludePathPatterns("/api/user/sendMsg")
|
||||||
|
.excludePathPatterns("/api/user/loginPhone")
|
||||||
|
//放行swagger 测试验证
|
||||||
|
.excludePathPatterns("/api/user/get");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,95 @@
|
||||||
|
package com.recovery.order.config.ds;
|
||||||
|
|
||||||
|
import com.alibaba.druid.pool.DruidDataSource;
|
||||||
|
import com.recovery.common.base.ds.DynamicDataSource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.ibatis.session.SqlSessionFactory;
|
||||||
|
import org.mybatis.spring.SqlSessionFactoryBean;
|
||||||
|
import org.mybatis.spring.SqlSessionTemplate;
|
||||||
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
|
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||||
|
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by YHYR on 2017-12-25
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Configuration
|
||||||
|
@MapperScan(basePackages = DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "commonSqlSessionFactory")
|
||||||
|
public class DataSourceConfig {
|
||||||
|
|
||||||
|
// 精确到模块目录,以便跟其他数据源隔离
|
||||||
|
static final String PACKAGE = "com.recovery.admin.boot.mapper";
|
||||||
|
static final String MAPPER_LOCATION = "classpath:mapper/*.xml";
|
||||||
|
|
||||||
|
@Value("${master.datasource.url}")
|
||||||
|
private String masterDBUrl;
|
||||||
|
|
||||||
|
@Value("${master.datasource.username}")
|
||||||
|
private String masterDBUser;
|
||||||
|
|
||||||
|
@Value("${master.datasource.password}")
|
||||||
|
private String masterDBPassword;
|
||||||
|
|
||||||
|
@Value("${master.datasource.driverClassName}")
|
||||||
|
private String masterDBDreiverName;
|
||||||
|
|
||||||
|
|
||||||
|
@Bean(name = "commonDataSource")
|
||||||
|
@Primary
|
||||||
|
public DynamicDataSource dynamicDataSource(){
|
||||||
|
DynamicDataSource dynamicDataSource = DynamicDataSource.getInstance();
|
||||||
|
|
||||||
|
DruidDataSource masterDataSource = new DruidDataSource();
|
||||||
|
try {
|
||||||
|
masterDataSource.setUrl(masterDBUrl);
|
||||||
|
masterDataSource.setUsername(masterDBUser);
|
||||||
|
masterDataSource.setPassword(masterDBPassword);
|
||||||
|
masterDataSource.setDriverClassName(masterDBDreiverName);
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error(e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<Object,Object> map = new HashMap<>();
|
||||||
|
map.put("master", masterDataSource);
|
||||||
|
dynamicDataSource.setTargetDataSources(map);
|
||||||
|
|
||||||
|
return dynamicDataSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(name = "commonSqlSessionFactory")
|
||||||
|
@Primary
|
||||||
|
public SqlSessionFactory sqlSessionFactory(
|
||||||
|
@Qualifier("commonDataSource") DataSource dynamicDataSource)
|
||||||
|
throws Exception {
|
||||||
|
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
|
||||||
|
bean.setDataSource(dynamicDataSource);
|
||||||
|
bean.setMapperLocations(new PathMatchingResourcePatternResolver()
|
||||||
|
.getResources(DataSourceConfig.MAPPER_LOCATION));
|
||||||
|
return bean.getObject();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(name = "commonTransactionManager")
|
||||||
|
@Primary
|
||||||
|
public DataSourceTransactionManager commonTransactionManager() {
|
||||||
|
return new DataSourceTransactionManager(dynamicDataSource());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Bean(name = "commonSqlSessionTemplate")
|
||||||
|
public SqlSessionTemplate sqlSessionTemplate(
|
||||||
|
@Qualifier("commonSqlSessionFactory") SqlSessionFactory sqlSessionFactory)
|
||||||
|
throws Exception {
|
||||||
|
return new SqlSessionTemplate(sqlSessionFactory);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
package com.recovery.order.config.ds;
|
||||||
|
|
||||||
|
import com.alibaba.druid.pool.DruidDataSource;
|
||||||
|
import org.apache.ibatis.session.SqlSessionFactory;
|
||||||
|
import org.mybatis.spring.SqlSessionFactoryBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||||
|
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
//@Configuration
|
||||||
|
//// 扫描 Mapper 接口并容器管理
|
||||||
|
//@MapperScan(basePackages = TeachingDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "teachingSqlSessionFactory")
|
||||||
|
public class TeachingDataSourceConfig {
|
||||||
|
// 精确到 course 目录,以便跟其他数据源隔离
|
||||||
|
static final String PACKAGE = "com.recovery.order.mapper";
|
||||||
|
static final String MAPPER_LOCATION = "classpath:mapper/*.xml";
|
||||||
|
|
||||||
|
@Value("${admin.datasource.url}")
|
||||||
|
private String url;
|
||||||
|
|
||||||
|
@Value("${admin.datasource.username}")
|
||||||
|
private String user;
|
||||||
|
|
||||||
|
@Value("${admin.datasource.password}")
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
@Value("${admin.datasource.driverClassName}")
|
||||||
|
private String driverClass;
|
||||||
|
|
||||||
|
@Bean(name = "adminDataSource")
|
||||||
|
public DataSource cpdDataSource() {
|
||||||
|
DruidDataSource dataSource = new DruidDataSource();
|
||||||
|
dataSource.setDriverClassName(driverClass);
|
||||||
|
dataSource.setUrl(url);
|
||||||
|
dataSource.setUsername(user);
|
||||||
|
dataSource.setPassword(password);
|
||||||
|
return dataSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(name = "adminTransactionManager")
|
||||||
|
public DataSourceTransactionManager courseTransactionManager() {
|
||||||
|
return new DataSourceTransactionManager(cpdDataSource());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(name = "adminSqlSessionFactory")
|
||||||
|
public SqlSessionFactory cpdSqlSessionFactory(@Qualifier("adminDataSource") DataSource cpdDataSource)
|
||||||
|
throws Exception {
|
||||||
|
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
|
||||||
|
sessionFactory.setDataSource(cpdDataSource);
|
||||||
|
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
|
||||||
|
.getResources(TeachingDataSourceConfig.MAPPER_LOCATION));
|
||||||
|
return sessionFactory.getObject();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.recovery.order.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import com.recovery.common.base.result.ApiResult;
|
||||||
|
import com.recovery.common.base.util.RedisUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/v1/test")
|
||||||
|
@Slf4j
|
||||||
|
public class testController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
RedisUtil redisUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cs
|
||||||
|
*/
|
||||||
|
@GetMapping("/cs")
|
||||||
|
public ApiResult<String> cs(@RequestParam String name, HttpServletRequest request) {
|
||||||
|
|
||||||
|
return ApiResult.ok("cs");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.recovery.order.exception;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import com.recovery.common.base.result.IResultCode;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义异常类
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class BusinessException extends RuntimeException{
|
||||||
|
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
private String msg;
|
||||||
|
|
||||||
|
|
||||||
|
public BusinessException(IResultCode apiCode) {
|
||||||
|
super(apiCode.getMsg());
|
||||||
|
this.code = apiCode.getCode();
|
||||||
|
this.msg = apiCode.getMsg();
|
||||||
|
}
|
||||||
|
|
||||||
|
public BusinessException(String code, String message) {
|
||||||
|
super(code+":"+message);
|
||||||
|
this.code = code;
|
||||||
|
this.msg = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BusinessException(String message) {
|
||||||
|
super("5001"+":"+message);
|
||||||
|
this.code = "5001";
|
||||||
|
this.msg = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.recovery.order.exception;
|
||||||
|
|
||||||
|
|
||||||
|
import com.recovery.common.base.result.ApiResult;
|
||||||
|
import com.recovery.common.base.result.ResultCode;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
|
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 全局异常处理
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@RestControllerAdvice
|
||||||
|
public class GlobalExceptionHandler {
|
||||||
|
|
||||||
|
//自定义异常
|
||||||
|
@ExceptionHandler(BusinessException.class)
|
||||||
|
public ApiResult systemExceptionHandler(BusinessException e) {
|
||||||
|
log.error("BusinessException全局异常:{}",e);
|
||||||
|
return ApiResult.failed(e.getCode(), e.getMsg());
|
||||||
|
}
|
||||||
|
|
||||||
|
//系统异常
|
||||||
|
@ExceptionHandler(Exception.class)
|
||||||
|
public ApiResult exceptionHandler(Exception e) {
|
||||||
|
log.error("Exception全局异常:{}",e);
|
||||||
|
return ApiResult.failed(ResultCode.SYSTEM_EXECUTION_ERROR.getCode(), e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
//Security
|
||||||
|
// @ExceptionHandler(value = AccessDeniedException.class)
|
||||||
|
// public void accessDeniedException(AccessDeniedException e) {
|
||||||
|
// throw e;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,140 @@
|
||||||
|
package com.recovery.order.filter;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
|
|
||||||
|
import javax.servlet.ReadListener;
|
||||||
|
import javax.servlet.ServletInputStream;
|
||||||
|
import javax.servlet.ServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletRequestWrapper;
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
public class RequestWrapper extends HttpServletRequestWrapper {
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(RequestWrapper.class);
|
||||||
|
private final byte[] body;
|
||||||
|
|
||||||
|
public RequestWrapper(HttpServletRequest request) {
|
||||||
|
super(request);
|
||||||
|
String sessionStream = getBodyString(request);
|
||||||
|
body = sessionStream.getBytes(StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBodyString() {
|
||||||
|
return new String(body, StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @date: 2023/2/6 12:46
|
||||||
|
* @author: zhouzhaodong
|
||||||
|
* @description: 获取请求Body
|
||||||
|
*/
|
||||||
|
public String getBodyString(final ServletRequest request) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
InputStream inputStream = null;
|
||||||
|
BufferedReader reader = null;
|
||||||
|
try {
|
||||||
|
inputStream = cloneInputStream(request.getInputStream());
|
||||||
|
reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
|
||||||
|
String line = "";
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
sb.append(line);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
if (inputStream != null) {
|
||||||
|
try {
|
||||||
|
inputStream.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (reader != null) {
|
||||||
|
try {
|
||||||
|
reader.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 接收到请求,记录请求内容
|
||||||
|
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||||
|
//获取请求的域名
|
||||||
|
HttpServletRequest req = attributes.getRequest();
|
||||||
|
// 根据域名获取网站信息
|
||||||
|
StringBuffer urlBuf = req.getRequestURL();
|
||||||
|
try {
|
||||||
|
logger.info("获取请求地址:" + new URL(urlBuf.toString()).getPath());
|
||||||
|
logger.info("获取请求ip:" + getIPAddress(req));
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
logger.info("获取body请求参数:" + sb);
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIPAddress(HttpServletRequest request) {
|
||||||
|
String ipAddress = request.getRemoteAddr();
|
||||||
|
return ipAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @date: 2023/2/6 12:46
|
||||||
|
* @author: zhouzhaodong
|
||||||
|
* @description: 复制输入流
|
||||||
|
*/
|
||||||
|
public InputStream cloneInputStream(ServletInputStream inputStream) {
|
||||||
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int len;
|
||||||
|
try {
|
||||||
|
while ((len = inputStream.read(buffer)) > -1) {
|
||||||
|
byteArrayOutputStream.write(buffer, 0, len);
|
||||||
|
}
|
||||||
|
byteArrayOutputStream.flush();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BufferedReader getReader() {
|
||||||
|
return new BufferedReader(new InputStreamReader(getInputStream()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ServletInputStream getInputStream() {
|
||||||
|
|
||||||
|
final ByteArrayInputStream bais = new ByteArrayInputStream(body);
|
||||||
|
return new ServletInputStream() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int read() {
|
||||||
|
return bais.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isFinished() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isReady() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setReadListener(ReadListener readListener) {
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
package com.recovery.order.interceptor;
|
||||||
|
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.auth0.jwt.interfaces.DecodedJWT;
|
||||||
|
|
||||||
|
import com.recovery.common.base.constant.Constants;
|
||||||
|
import com.recovery.common.base.result.ResultCode;
|
||||||
|
import com.recovery.common.base.util.RedisUtil;
|
||||||
|
import com.recovery.common.base.utils.JwtUtils;
|
||||||
|
import com.recovery.order.exception.BusinessException;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
import org.springframework.web.servlet.HandlerInterceptor;
|
||||||
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class JwtInterceptor implements HandlerInterceptor {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
RedisUtil redisUtil;
|
||||||
|
|
||||||
|
public JwtInterceptor(RedisUtil redisUtil) {
|
||||||
|
this.redisUtil = redisUtil;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||||
|
HashMap<String, String> map=new HashMap<>();
|
||||||
|
// //获取请求参数
|
||||||
|
// RequestWrapper requestWrapper = new RequestWrapper(request);
|
||||||
|
// //这里getBodyString()方法无参数
|
||||||
|
// log.info("RequestBody: {}", requestWrapper.getBodyString());
|
||||||
|
//从http请求头获取token
|
||||||
|
|
||||||
|
String token = request.getHeader(Constants.LOGIN_USRE_TOKEN);
|
||||||
|
if (StringUtils.isEmpty(token)) {
|
||||||
|
throw new BusinessException(ResultCode.LOGIN_ERROR);
|
||||||
|
}
|
||||||
|
boolean rest = redisUtil.hasKey("userToken:" +token);
|
||||||
|
if (!rest) {
|
||||||
|
throw new BusinessException(ResultCode.LOGIN_EXPIRE_ERROR);
|
||||||
|
}
|
||||||
|
//把变量放在request请求域中,仅可以被这次请求,即同一个requerst使用
|
||||||
|
request.setAttribute(Constants.LOGIN_USRE_TOKEN,token);
|
||||||
|
try {
|
||||||
|
//如果验证成功放行请求
|
||||||
|
DecodedJWT verify = JwtUtils.verifyToken(token);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
throw new BusinessException(ResultCode.TOKEN_INVALID_OR_EXPIRED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @date: 2023/2/6 12:46
|
||||||
|
* @author: zhouzhaodong
|
||||||
|
* @description: 访问控制器方法后执行
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
|
||||||
|
log.info(new Date() + "--postHandle:" + request.getRequestURL());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @date: 2023/2/6 12:46
|
||||||
|
* @author: zhouzhaodong
|
||||||
|
* @description: postHandle方法执行完成后执行,一般用于释放资源
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
|
||||||
|
log.info(new Date() + "--afterCompletion:" + request.getRequestURL());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void renderJson(HttpServletResponse response, Object object) {
|
||||||
|
response.reset();
|
||||||
|
response.setHeader("Access-Control-Allow-Origin", "*");
|
||||||
|
response.setHeader("Access-Control-Allow-Methods", "*");
|
||||||
|
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");
|
||||||
|
response.setContentType("application/json");
|
||||||
|
response.setCharacterEncoding("utf-8");
|
||||||
|
try {
|
||||||
|
response.getWriter().print(JSONObject.toJSONString(object));
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
package com.recovery.order.listener;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.boot.CommandLineRunner;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author:
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class InitResourcePermissionCache implements CommandLineRunner {
|
||||||
|
/**
|
||||||
|
* 启动时操作
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(String... args) {
|
||||||
|
log.info("刷新权限------------------------------");
|
||||||
|
// iSysPermissionService.refreshPermRolesRules();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.recovery.order.rest;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author:
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/rest/users")
|
||||||
|
@Slf4j
|
||||||
|
public class UserRest {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.recovery.order.util;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import com.recovery.common.base.constant.Constants;
|
||||||
|
import com.recovery.common.base.dto.UserAuthorityDto;
|
||||||
|
import com.recovery.common.base.result.ResultCode;
|
||||||
|
import com.recovery.common.base.util.RedisUtil;
|
||||||
|
import com.recovery.order.exception.BusinessException;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class UserUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取登录用户信息
|
||||||
|
* @param request
|
||||||
|
* @param redisUtil
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static UserAuthorityDto getLoginUserInfo(HttpServletRequest request, RedisUtil redisUtil){
|
||||||
|
String loginUserToken = (String) request.getHeader(Constants.LOGIN_USRE_TOKEN);
|
||||||
|
Boolean rest = redisUtil.hasKey("userToken:" +loginUserToken);
|
||||||
|
log.info("缓存key:"+"userToken:" +loginUserToken);
|
||||||
|
log.info("缓存中是否有这条用户:"+rest);
|
||||||
|
if (!rest) {
|
||||||
|
throw new BusinessException(ResultCode.TOKEN_INVALID_OR_EXPIRED);
|
||||||
|
}
|
||||||
|
UserAuthorityDto userAuthorityDto = (UserAuthorityDto) redisUtil.get("userToken:" +loginUserToken);
|
||||||
|
return userAuthorityDto;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
application:
|
application:
|
||||||
name: hoe-order
|
name: hoe-admin
|
||||||
main:
|
main:
|
||||||
allow-bean-definition-overriding: true
|
allow-bean-definition-overriding: true
|
||||||
profiles:
|
profiles:
|
||||||
|
@ -16,7 +16,7 @@ spring:
|
||||||
config:
|
config:
|
||||||
server-addr: localhost:8848
|
server-addr: localhost:8848
|
||||||
file-extension: yaml
|
file-extension: yaml
|
||||||
prefix: hoe-order
|
prefix: hoe-admin
|
||||||
group: dev
|
group: dev
|
||||||
namespace: 11bfd099-10d6-4f2c-b969-58b76e435cce
|
namespace: 11bfd099-10d6-4f2c-b969-58b76e435cce
|
||||||
server:
|
server:
|
||||||
|
|
|
@ -43,11 +43,11 @@
|
||||||
</root>
|
</root>
|
||||||
<!-- 测试环境+开发环境. 多个使用逗号隔开. -->
|
<!-- 测试环境+开发环境. 多个使用逗号隔开. -->
|
||||||
<springProfile name="test,dev">
|
<springProfile name="test,dev">
|
||||||
<logger name="com.recovery.order.controller" level="INFO" />
|
<logger name="com.recovery.admin.boot.controller" level="INFO" />
|
||||||
</springProfile>
|
</springProfile>
|
||||||
<!-- 生产环境. -->
|
<!-- 生产环境. -->
|
||||||
<springProfile name="prod">
|
<springProfile name="prod">
|
||||||
<logger name="com.recovery.order.controller" level="ERROR" />
|
<logger name="com.recovery.admin.boot.controller" level="ERROR" />
|
||||||
</springProfile>
|
</springProfile>
|
||||||
|
|
||||||
</configuration>
|
</configuration>
|
|
@ -157,7 +157,7 @@
|
||||||
<logger name="java.sql.PreparedStatement" value="DEBUG" />
|
<logger name="java.sql.PreparedStatement" value="DEBUG" />
|
||||||
<logger name="java.sql.Connection" value="DEBUG" />
|
<logger name="java.sql.Connection" value="DEBUG" />
|
||||||
<logger name="java.sql.Statement" value="DEBUG" />
|
<logger name="java.sql.Statement" value="DEBUG" />
|
||||||
<logger name="com.moan.hoe.common.aspect" value="DEBUG" />
|
<logger name="com.recovery.admin.boot.aspect" value="DEBUG" />
|
||||||
|
|
||||||
|
|
||||||
<!-- root级别 DEBUG -->
|
<!-- root级别 DEBUG -->
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.recovery.admin.boot.mapper.UserMapper">
|
||||||
|
|
||||||
|
|
||||||
|
<select id="getByUsername" resultType="com.recovery.common.base.dto.UserAuthDTO">
|
||||||
|
select t1.user_name as userName,t1.password,t1.state as status,t1.id as userId
|
||||||
|
from tbl_user t1 where t1.user_name = #{userName}
|
||||||
|
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</mapper>
|
Loading…
Reference in New Issue