提交 4a84a4f8 authored 作者: 黄夏豪's avatar 黄夏豪

[数据模型] 新增了对 长文本的支持

上级 579a29b1
......@@ -11,11 +11,10 @@
<groupId>com.tykj</groupId>
<artifactId>dataWarehouse</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>DataTest</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<skipTests>true</skipTests>
<spring-cloud.version>2020.0.3</spring-cloud.version>
</properties>
<packaging>jar</packaging>
<dependencies>
......@@ -38,10 +37,18 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 如果需要支持更多的数据库,请先去generateAnnotation这个项目,增加新的Entity注解-->
<dependency>
<groupId>com.programmaticallyspeaking.aptdemo</groupId>
<artifactId>generateAnnotation</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/main/resources/lib/generateAnnotation-1.0-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>1.0</version>
<version>1.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/main/resources/lib/oscarJDBC16.jar</systemPath>
</dependency>
......@@ -106,28 +113,115 @@
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
<!-- 如果需要支持更多的数据库,请先去generateAnnotation这个项目,增加新的Entity注解-->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security -->
<dependency>
<groupId>com.programmaticallyspeaking.aptdemo</groupId>
<artifactId>generateAnnotation</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/main/resources/lib/generateAnnotation-1.0-SNAPSHOT.jar</systemPath>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.10</version>
</dependency>
<!-- httpclient缓存-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient-cache</artifactId>
<version>4.5</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<!-- http的mime类型都在这里面-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.3.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- 打包lib代码到本地仓库 谁用谁打包-->
<!-- <dependency>-->
<!-- <groupId>com.zjty</groupId>-->
<!-- <artifactId>generateAnnotation</artifactId>-->
<!-- <version>1.0-SNAPSHOT</version>-->
<!-- </dependency>-->
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.1</version>
</plugin>
</plugins>
</build>
......
......@@ -2,15 +2,22 @@ package com.tykj;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import java.util.Locale;
/**
* @author HASEE
*/
@SpringBootApplication
@SpringBootApplication(scanBasePackages = {
"com.tykj"
}, exclude = {org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})
public class DataWareHouseApplication {
public static void main(String[] args) {
SpringApplication.run(DataWareHouseApplication.class, args);
}
}
......@@ -5,6 +5,7 @@ import com.tykj.model.create_util.MysqlTableUtil;
import com.tykj.model.create_util.OscarTableUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/**
......@@ -12,11 +13,17 @@ import org.springframework.stereotype.Component;
* @version V1.0
* @data 2021/7/15 10:46
**/
@Component
@Configuration
public class BeanFactory {
@Value("${spring.datasource.driver-class-name}")
private String env;
@Bean
ClassLoader initClassLoader(){
return getClass().getClassLoader();
}
@Bean("baseCreateUtil")
BaseTableUtil baseCreateUtil() {
if ("com.mysql.cj.jdbc.Driver".equals(env) || "com.mysql.jdbc.Driver".equals(env)) {
......
package com.tykj.base.config;
import com.google.common.collect.Sets;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
......@@ -7,13 +8,18 @@ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.OAuthBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.Arrays;
import java.util.Collections;
/**
* @author zsp
......@@ -41,24 +47,60 @@ public class WebMvcConfig implements WebMvcConfigurer {
};
}
@Bean
public Docket api() {
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.produces(Sets.newHashSet("application/json"))
.consumes(Sets.newHashSet("application/json"))
.protocols(Sets.newHashSet("https", "http"))
.apiInfo(apiInfo())
.forCodeGeneration(true)
.useDefaultResponseMessages(true)
// .globalResponseMessage(RequestMethod.GET, getResMsg())
.select()
// 自行修改为自己的包路径
.apis(RequestHandlerSelectors.basePackage("com.tykj"))
// 指定controller存放的目录路径
// .apis(RequestHandlerSelectors.withClassAnnotation(AutoDocument.class))
.paths(PathSelectors.any())
.build();
.build()
.apiInfo(apiInfo())
.securitySchemes(Collections.singletonList(securityScheme()))
.securityContexts(Collections.singletonList(securityContext()));
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("数据模型")
.description("数据模型")
.version("1.1")
// 文档标题
.title("数据仓")
// 文档描述
.description("")
.termsOfServiceUrl("")
.version("v1")
.contact(new Contact("efs", "git", "ty@example.com"))
.build();
}
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(Collections.singletonList(new SecurityReference("spring_oauth", scopes())))
.forPaths(PathSelectors.any())
.build();
}
private SecurityScheme securityScheme() {
GrantType grantType = new ResourceOwnerPasswordCredentialsGrant("/user/login");
return new OAuthBuilder()
.name("spring_oauth")
.grantTypes(Collections.singletonList(grantType))
.scopes(Arrays.asList(scopes()))
.build();
}
private AuthorizationScope[] scopes() {
return new AuthorizationScope[]{
new AuthorizationScope("all", "All scope is trusted!")
};
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 这里之所以多了一"/",是为了解决打war时访问不到问题
......
package com.tykj.base.result;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.AllArgsConstructor;
import lombok.Data;
......@@ -9,6 +10,7 @@ import lombok.NoArgsConstructor;
* @author dengdiyi
* @description 接口返回统一标准类
*/
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
......@@ -17,11 +19,11 @@ public class ResultObj<T> {
private T data;
private String message;
private String msg;
public ResultObj(T o) {
this.data = o;
this.message = "no message";
this.msg = "no message";
}
}
package com.tykj.base.result;
import com.tykj.base.result.ResultObj;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
......
package com.tykj.model.controller;
import com.tykj.base.result.ApiException;
import com.tykj.base.result.ResultUtil;
......@@ -57,8 +55,7 @@ public class ModelController {
private RuleDao ruleDao;
@Autowired
SessionUtil sessionUtil;
@Autowired
private Environment env;
/**
* @param
......
package com.tykj.model.create_util;
import com.tykj.base.result.ApiException;
import com.tykj.model.entity.vo.ColumnVO;
import com.tykj.model.entity.vo.TableVO;
import java.util.List;
/**
* @author huangjiafu
* @version V1.0
* @data 2021/7/15 10:40
**/
public abstract class BaseCreateUtil {
public String createTable(TableVO tableVO) {
// 1sql-type="text" string 转为text文本,2长度超过会自动转换
List<ColumnVO> dataList = tableVO.getDataList();
String xmlMapping = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<!DOCTYPE hibernate-mapping PUBLIC\n" +
" \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n" +
" \"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd\">\n" +
"<hibernate-mapping>\n" +
" <class entity-name=\"" + tableVO.getModelName().toLowerCase().toUpperCase() + "\" table=\"" + tableVO.getModelName().toLowerCase().toUpperCase() + "\">\n";
xmlMapping += addGenerator(tableVO);
for (ColumnVO columnVO : dataList) {
try {
//由于ID属于自动建立的列 不允许用户自己建立
// if (!columnVO.getFieldName().toUpperCase(Locale.ROOT).equals("ID")){
xmlMapping +=
"\n <property type=\"" + columnVO.getFieldType() + "\" name=\"" + columnVO.getFieldName().toUpperCase() + "\" length=\"" + columnVO.getFieldLength() +
"\" column=\"" + columnVO.getFieldName().toUpperCase() + "\"/>\n";
// }
} catch (Exception e) {
throw new ApiException("名称不合法!");
}
}
xmlMapping += addDefaultTime(tableVO);
xmlMapping += " </class>\n" +
"</hibernate-mapping>";
return xmlMapping;
}
abstract String addGenerator(TableVO tableVO);
abstract String addDefaultTime(TableVO tableVO);
}
......@@ -4,7 +4,6 @@ import com.tykj.base.result.ApiException;
import com.tykj.model.entity.vo.ColumnVO;
import com.tykj.model.entity.vo.TableVO;
import javax.persistence.Table;
import java.util.List;
/**
......
......@@ -27,7 +27,7 @@ public class MysqlTableUtil extends BaseTableUtil {
"</property> " ;
result+=" <property name =\"UPDATE_TIME\" type =\"java.util.Date\" generated=\"always\" insert=\"false\" update=\"false\" access=\"field\" >" +
"<column name=\"UPDATE_TIME\" sql-type=\"timestamp\" default=\"CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\" />\n"+
"<column name=\"UPDATE_TIME\" sql-type=\"timestamp\" />\n"+
"</property> " ;
return result;
......
package com.tykj.model.create_util;
import com.tykj.model.entity.vo.TableVO;
/**
* @author huangjiafu
* @version V1.0
* @data 2021/7/15 10:58
**/
public class OscarCreateUtil extends BaseCreateUtil {
@Override
public String createTable(TableVO tableVO) {
return super.createTable(tableVO);
}
@Override
String addGenerator(TableVO tableVO) {
return " <id name=\"ID\" type=\"java.lang.Integer\" length=\"11\" unsaved-value=\"null\" >\n" +
" <generator class=\"com.tykj.base.entity.XMQGenerator\" >\n" +
"<param name=\"sequence\">SEQUENCE_" + tableVO.getModelName().toLowerCase().toUpperCase() + "</param>" +
"</generator>" +
" </id>\n";
}
@Override
String addDefaultTime(TableVO tableVO) {
return " <property name = \"CREATE_TIME\" type =\"java.util.Date\" generated=\"always\" > \n" +
" <column name = \"CREATE_TIME\" default = \"CURRENT_TIMESTAMP\" /> \n" +
" </property> \n" +
" <property name = \"UPDATE_TIME\" type =\"java.util.Date\" > \n" +
" <column name = \"UPDATE_TIME\" default = \"CURRENT_TIMESTAMP\" /> \n" +
" </property> ";
}
}
......@@ -40,4 +40,6 @@ public interface ColumnInfoDao extends JpaRepository<ColumnInfo, Integer>, JpaSp
* @return
*/
ColumnInfo findByDbIdAndFieldName(Integer id, String columnName);
List<ColumnInfo> findAllByDbName(String name);
}
......@@ -8,6 +8,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.ArrayList;
......@@ -48,6 +49,7 @@ public class ColumnInfo extends BaseEntity {
@ApiModelProperty("所属表id")
private Integer dbId;
@ApiModelProperty("详细描述")
// @Lob
private String description;
@ApiModelProperty("规则")
......
package com.tykj.model.entity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @Description TODO
* @Author WWW
* @Date 2021/8/4 11:14
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResultVO {
private Integer ID;
private String CKEY;
private String CLABEL;
private String CVALUE;
private Boolean ISTRUE;
private Boolean ISUPDATE;
private Boolean TYPE;
private Date CREATE_TIME;
private Date UPDATE_TIME;
}
......@@ -2,13 +2,10 @@ package com.tykj.model.utils;
import com.google.common.base.Strings;
import com.tykj.model.entity.vo.ExecuteSqlVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static java.util.Objects.isNull;
......@@ -43,10 +40,8 @@ public class SqlUtil {
* @param length 字段长度
* @return SQL语句
*/
public static List<ExecuteSqlVo> addColumn(String table, String name, String type, Integer length, Map<String, String> sqlTypeMap) {
List<ExecuteSqlVo> resultSqlVo = new ArrayList<>();
public static String addColumn(String table, String name, String type, Integer length, Map<String, String> sqlTypeMap) {
type = sqlTypeMap.get(type);
boolean hasValue = !Strings.isNullOrEmpty(table)
&& !Strings.isNullOrEmpty(name)
&& nonNull(type);
......@@ -59,13 +54,11 @@ public class SqlUtil {
result.append(String.format("(%s)", length));
}
result.append(";");
String resultSql = result.toString();
resultSqlVo.add(new ExecuteSqlVo(resultSql,table,"",name,"",type));
return result.toString();
} else {
log.error("表名或字段名不能为空");
throw new RuntimeException("表名或字段名不能为空");
}
return resultSqlVo;
}
/**
......@@ -78,8 +71,7 @@ public class SqlUtil {
* @param newLength 字段长度
* @return SQL语句
*/
public static List<ExecuteSqlVo> updateColumnType(String table, String name, String newName,String oldType, String newType, Integer newLength, Map<String, String> sqlTypeMap) {
List<ExecuteSqlVo> resultSqlVo = new ArrayList<>();
public static String updateColumnType(String table, String name, String newName, String newType, Integer newLength, String driverType, Map<String, String> sqlTypeMap) {
newType = sqlTypeMap.get(newType);
boolean hasValue = !Strings.isNullOrEmpty(table)
&& nonNull(newType);
......@@ -90,12 +82,13 @@ public class SqlUtil {
} else {
result.append(String.format("ALTER TABLE %s MODIFY %s %s ;", table, name, newType));
}
String resultSql = result.toString();
resultSqlVo.add(new ExecuteSqlVo(resultSql,table,name,newName,oldType,newType));
if (isNull(newName)) {
result.append(String.format("ALTER TABLE %s RENAME COLUMN %s TO %s ;", table, name, newName));
}
} else {
log.error("参数缺失");
}
return resultSqlVo;
return result.toString();
}
/**
......@@ -106,20 +99,17 @@ public class SqlUtil {
* @param newName 新字段名
* @return SQL语句
*/
public static List<ExecuteSqlVo> updateColumnName(String table, String name, String newName) {
List<ExecuteSqlVo> resultSqlVo = new ArrayList<>();
public static String updateColumnName(String table, String name, String newName) {
boolean hasValue = !Strings.isNullOrEmpty(table);
StringBuilder result = new StringBuilder();
if (hasValue) {
if (!isNull(newName)) {
result.append(String.format("ALTER TABLE %s RENAME COLUMN %s TO %s ;", table, name, newName));
}
String resultSql = result.toString();
resultSqlVo.add(new ExecuteSqlVo(resultSql,table,name,newName,"",""));
} else {
log.error("参数缺失");
}
return resultSqlVo;
return result.toString();
}
/**
......@@ -129,11 +119,8 @@ public class SqlUtil {
* @param name 字段名
* @return SQL语句
*/
public static List<ExecuteSqlVo> deleteColumn(String table, String name) {
List<ExecuteSqlVo> resultSqlVo = new ArrayList<>();
String resultSql = String.format("ALTER TABLE %s DROP %s;", table, name);
resultSqlVo.add(new ExecuteSqlVo(resultSql,table,name,name,"",""));
return resultSqlVo;
public static String deleteColumn(String table, String name) {
return String.format("ALTER TABLE %s DROP %s;", table, name);
}
private static boolean needLengthColumn(String type) {
......
package com.tykj.user.authencation.checks;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.security.authentication.AccountExpiredException;
import org.springframework.security.authentication.DisabledException;
import org.springframework.security.authentication.LockedException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsChecker;
/**
* 用户可用性验证类
*
* @author HuangXiahao
* @version V1.0
* @class DefaultPostAuthenticationChecks
* @packageName com.example.personnelmanager.common.authencation.checks
* @data 2020/6/14
**/
public class DefaultPreAuthenticationChecks implements UserDetailsChecker {
protected final Log logger = LogFactory.getLog(getClass());
/***
* 用户可用性验证
*
* @param user 需要用于验证的UserDetails
* @Return : void
*/
@Override
public void check(UserDetails user) {
if (!user.isAccountNonLocked()) {
logger.debug("User account is locked");
throw new LockedException("User account is locked");
}
if (!user.isEnabled()) {
logger.debug("User account is disabled");
throw new DisabledException("User account is disabled");
}
if (!user.isAccountNonExpired()) {
logger.debug("User account is expired");
throw new AccountExpiredException("User account is expired");
}
}
}
/*
* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.tykj.user.authencation.filter;
import com.tykj.base.result.ApiException;
import com.tykj.user.authencation.token.JwtAuthencationToken;
import com.tykj.user.pojo.StorageKey;
import com.tykj.user.pojo.User;
import com.tykj.user.service.StorageKeyService;
import com.tykj.user.util.CipherUtil;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Jwt凭证验证拦截器
*
* @author HuangXiahao
* @version V1.0
* @class CustomJWTAuthenticationFilter
* @packageName com.example.personnelmanager.common.authencation.filter
* @data 2020/6/13
**/
public class CustomJwtAuthenticationFilter extends
AbstractAuthenticationProcessingFilter {
public static final String JWT_KEY = "jwt";
/**
* Jwt公钥路径
*/
String jwtFilePath;
StorageKeyService storageKeyService;
public void setStorageKeyService(StorageKeyService storageKeyService) {
this.storageKeyService = storageKeyService;
}
public CustomJwtAuthenticationFilter() {
//设置用户接口的路径以及访问方式
super(new AntPathRequestMatcher("/user/login", "GET"));
}
/***
* 在这个方法中执行验证操作
* @param request
* @param response
* @Return : org.springframework.security.core.Authentication
*/
@Override
public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException {
JwtAuthencationToken authRequest ;
User userByJwt;
//如果请求头中没有jwt凭证的话说明不应该使用该类进行验证,直接报错
if (!StringUtils.isEmpty(request.getHeader(JWT_KEY))) {
//通过请求头获取jwt凭证中的用户信息
userByJwt = getuserbyjwt(request);
authRequest = new JwtAuthencationToken(
userByJwt);
//为用于验证的用户注入session信息
setDetails(request, authRequest);
//进行验证
return getAuthenticationManager().authenticate(authRequest);
} else {
throw new ApiException("未设置token");
}
}
/***
* 为用户注入session信息
* @param request
* @param authRequest
* @Return : void
*/
protected void setDetails(HttpServletRequest request,
JwtAuthencationToken authRequest) {
authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
}
/***
* 通过请求头获取请求头中的用户信息
*
* @param request
* @Return : com.example.personnelmanager.entity.User
*/
public User getuserbyjwt(HttpServletRequest request) {
StorageKey storageKey = storageKeyService.getKeys();
String rsaPrivateKey = storageKey.getRsaPrivateKey();
String signPublicKey = storageKey.getSignPublicKey();
String jwt = request.getHeader("jwt");
try {
String decrypt = CipherUtil.decrypt(jwt, CipherUtil.string2PrivateKey(rsaPrivateKey));
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(CipherUtil.string2PublicKey(signPublicKey)).parseClaimsJws(decrypt);
logger.info("接收到的用户信息为:"+claimsJws.getBody());
User userRight = new User();
Claims body = claimsJws.getBody();
userRight.setUsername((String) body.get("username"));
userRight.setPhone((String) body.get("phone"));
return userRight;
}catch (Exception e){
logger.error("用户凭证无效");
throw new UsernameNotFoundException("用户凭证无效");
}
}
}
/*
* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.tykj.user.authencation.filter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.Nullable;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 用户名密码验证拦截器
*
* @author HuangXiahao
* @version V1.0
* @class CustomJWTAuthenticationFilter
* @packageName com.example.personnelmanager.common.authencation.filter
* @data 2020/6/13
**/
public class CustomUsernamePasswordAuthenticationFilter extends
AbstractAuthenticationProcessingFilter {
@Autowired
SuccessHandler healder;
public static final String SPRING_SECURITY_FORM_USERNAME_KEY = "username";
public static final String SPRING_SECURITY_FORM_PASSWORD_KEY = "password";
public CustomUsernamePasswordAuthenticationFilter() {
//设置用户接口的路径以及访问方式
super(new AntPathRequestMatcher("/user/login", "POST"));
}
/***
* 在这个方法中执行验证操作
* @param request
* @param response
* @Return : org.springframework.security.core.Authentication
*/
@Override
public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException {
String username = obtainUsername(request);
String password = obtainPassword(request);
if (username == null) {
username = "";
}
if (password == null) {
password = "";
}
username = username.trim();
//生成springSecurity能够辨认的用户类型
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(
username, password);
//为用于验证的用户注入session信息
setDetails(request, authRequest);
//进行验证
return getAuthenticationManager().authenticate(authRequest);
}
@Override
protected AuthenticationSuccessHandler getSuccessHandler() {
return healder;
}
/**
* 从request中取出密码
* @param request
* @return
*/
@Nullable
protected String obtainPassword(HttpServletRequest request) {
return request.getParameter(SPRING_SECURITY_FORM_PASSWORD_KEY);
}
/**
* 从request中取出用户名
*
* @param request
* @return
*/
@Nullable
protected String obtainUsername(HttpServletRequest request) {
return request.getParameter(SPRING_SECURITY_FORM_USERNAME_KEY);
}
/***
* 为用户注入session信息
* @param request
* @param authRequest
* @Return : void
*/
protected void setDetails(HttpServletRequest request,
UsernamePasswordAuthenticationToken authRequest) {
authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
}
}
package com.tykj.user.authencation.filter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tykj.user.config.UserMap;
import com.tykj.user.pojo.UserDetail;
import com.tykj.user.service.StorageKeyService;
import com.tykj.user.service.UserAuthorityService;
import com.tykj.user.util.SpringContextHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.stereotype.Component;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author huangjiafu
* @version V1.0
* @data 2021/7/7 14:06
**/
@Component
public class SuccessHandler implements AuthenticationSuccessHandler {
@Autowired
private UserAuthorityService userAuthorityService;
static Map<String, Object> tokenMap = new HashMap<>();
/**
* 登陆成功后返回的数据
* @param httpServletRequest
* @param httpServletResponse
* @param authentication
* @throws IOException
* @throws ServletException
*/
@Override
public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
//注入jwtTokenUtils 不知道为啥@Autowired注入不进来
// JwtTokenUtils jwtTokenUtils = (JwtTokenUtils) SpringContextHolder.getBean("jwtTokenUtils");
StorageKeyService storageKeyService = SpringContextHolder.getBean(StorageKeyService.class);
UserAuthorityService userAuthorityService = SpringContextHolder.getBean(UserAuthorityService.class);
//获取用户
UserDetail user = (UserDetail) authentication.getPrincipal();
System.out.println("/////:"+user.toString());
//获取用户APP权限id
String appId = userAuthorityService.findAppByUserId(user.getId());
//登录成功返回的map
Map<String, Object> successMap = new HashMap<>();
successMap.put("code", "200");
successMap.put("userId", user.getId());
successMap.put("username", user.getUsername());
successMap.put("type",user.getType());
successMap.put("clientIds",appId);
//生成token时加入的map
Map<String, Object> tokenMap = new HashMap<>();
//真实姓名 身份证号
tokenMap.put("username",user.getUsername());
tokenMap.put("realName", user.getRealName());
tokenMap.put("idCardNumber", user.getIdCardNumber());
tokenMap.put("newDate",new Date());
UserMap.userMap.put(user.getUsername(), new Date());
//创建token
//String token = jwtTokenUtils.createToken(tokenMap);
String token = storageKeyService.generateUserToken(tokenMap);
System.out.println("token:"+token);
successMap.put("token", token);
httpServletResponse.setStatus(200);
httpServletResponse.setContentType("application/json; charset=utf-8");
//返回前端
httpServletResponse.getWriter().println(new ObjectMapper().writeValueAsString(successMap));
}
}
package com.tykj.user.authencation.provider;
import com.tykj.user.authencation.checks.DefaultPreAuthenticationChecks;
import com.tykj.user.authencation.token.JwtAuthencationToken;
import com.tykj.user.pojo.User;
import com.tykj.user.service.CenterUserService;
import com.tykj.user.service.impl.SyncDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.InternalAuthenticationServiceException;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsChecker;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
/**
* 自定义SpringSecurity的用户处理类类
* 当用户通过统一登录平台访问本系统时由该类进行用户验证
*
* @author HuangXiahao
* @version V1.0
* @class JWTAuthenticationProvider
* @packageName com.example.personnelmanager.common.SpringSecurityProvider
* @data 2020/6/13
**/
@Component
public class JwtAuthenticationProvider implements AuthenticationProvider {
private final CenterUserService userDetailsService;
@Autowired
SyncDataService syncDataService;
/**
* 用户可用性检查类
*/
private final UserDetailsChecker preAuthenticationChecks = new DefaultPreAuthenticationChecks();
public JwtAuthenticationProvider(CenterUserService centerUserService) {
this.userDetailsService = centerUserService;
}
/***
* 验证用户
*
* @param authentication
* @Return : org.springframework.security.core.Authentication
*/
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
Assert.isInstanceOf(JwtAuthencationToken.class, authentication,
"错误的凭证");
String username = (authentication.getPrincipal() == null) ? "NONE_PROVIDED"
: ((User)authentication.getPrincipal()).getUsername();
UserDetails user = retrieveUser(username);
preAuthenticationChecks.check(user);
return createSuccessAuthentication(user,authentication,user);
}
/***
* 返回True则由该对象进行用户验证
*
* @param authentication
* @Return : boolean
*/
@Override
public boolean supports(Class<?> authentication) {
return (JwtAuthencationToken.class.isAssignableFrom(authentication));
}
/***
* 通过用户名获取对应的用户
*
* @param username
* @Return : org.springframework.security.core.userdetails.UserDetails
*/
protected final UserDetails retrieveUser(String username) {
UserDetails loadedUser = userDetailsService.selectByUserName(username);
if (loadedUser==null){
syncDataService.execute();
}
loadedUser = userDetailsService.selectByUserName(username);
if (loadedUser == null) {
throw new InternalAuthenticationServiceException(
"UserDetailsService returned null, which is an interface contract violation");
}
return loadedUser;
}
/***
* 创建一个已经通过验证的用户实例
* 该方法由SpringSecurity源码魔改得到
* @param principal
* @param authentication
* @param user
* @Return : org.springframework.security.core.Authentication
*/
protected Authentication createSuccessAuthentication(Object principal,
Authentication authentication, UserDetails user) {
JwtAuthencationToken result = new JwtAuthencationToken(principal,
user.getAuthorities());
result.setDetails(authentication.getDetails());
return result;
}
}
package com.tykj.user.authencation.provider;
import com.tykj.user.pojo.vo.JwtSecurityProperties;
import com.tykj.user.util.JwtTokenUtils;
import com.tykj.user.util.SpringContextHolder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Slf4j
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
private final JwtTokenUtils jwtTokenUtils;
public JwtAuthenticationTokenFilter(JwtTokenUtils jwtTokenUtils) {
this.jwtTokenUtils = jwtTokenUtils;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
JwtSecurityProperties jwtSecurityProperties = SpringContextHolder.getBean(JwtSecurityProperties.class);
String requestRri = request.getRequestURI();
//获取request token
String token = null;
String bearerToken = request.getHeader(jwtSecurityProperties.getHeader());
if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(jwtSecurityProperties.getTokenStartWith())) {
token = bearerToken.substring(jwtSecurityProperties.getTokenStartWith().length());
}
if (StringUtils.hasText(token) && jwtTokenUtils.validateToken(token)) {
Authentication authentication = jwtTokenUtils.getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(authentication);
log.debug("set Authentication to security context for '{}', uri: {}", authentication.getName(), requestRri);
} else {
log.debug("no valid JWT token found, uri: {}", requestRri);
}
filterChain.doFilter(request, response);
}
}
\ No newline at end of file
package com.tykj.user.authencation.provider;
import com.tykj.user.authencation.checks.DefaultPreAuthenticationChecks;
import com.tykj.user.service.CenterUserService;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.InternalAuthenticationServiceException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsChecker;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
/**
* 自定义SpringSecurity的用户处理类类
* 当用户通过用户名和密码访问本系统时由该类进行用户验证
*
* @author HuangXiahao
* @version V1.0
* @class UsernamePasswordAuthenticationProvider
* @packageName com.example.personnelmanager.common.authencationProvider
* @data 2020/6/14
**/
@Component
public class UsernamePasswordAuthenticationProvider implements AuthenticationProvider {
protected final Log logger = LogFactory.getLog(getClass());
/**
* 用户密码加密验证工具
*/
private final PasswordEncoder passwordEncoder;
private final CenterUserService centerUserService;
/**
* 用户可用性检查类
*/
private final UserDetailsChecker preAuthenticationChecks = new DefaultPreAuthenticationChecks();
public UsernamePasswordAuthenticationProvider(PasswordEncoder passwordEncoder, CenterUserService centerUserService) {
this.passwordEncoder = passwordEncoder;
this.centerUserService = centerUserService;
}
/***
* 验证用户
*
* @param authentication
* @Return : org.springframework.security.core.Authentication
*/
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
Assert.isInstanceOf(UsernamePasswordAuthenticationToken.class, authentication,
"错误的凭证");
String username = (authentication.getPrincipal() == null) ? "NONE_PROVIDED"
: authentication.getName();
UserDetails user = retrieveUser(username);
preAuthenticationChecks.check(user);
additionalAuthenticationChecks(user,
(UsernamePasswordAuthenticationToken) authentication);
return createSuccessAuthentication(user, authentication, user);
}
/**
* 描述:返回True则由该对象进行用户验证
* @param authentication
* @return
*/
@Override
public boolean supports(Class<?> authentication) {
return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication));
}
protected final UserDetails retrieveUser(String username) {
UserDetails loadedUser = centerUserService.getUserDetail(username);
if (loadedUser == null) {
throw new InternalAuthenticationServiceException(
"UserDetailsService returned null, which is an interface contract violation");
}
return loadedUser;
}
/***
* 描述:验证用户的密码是否正确
* 该方法由SpringSecurity源码魔改得到
* @param userDetails
* @param authentication
* @Return : void
* @Author : HuangXiahao
* @Date : 2020/6/14 15:50
*/
protected void additionalAuthenticationChecks(UserDetails userDetails,
UsernamePasswordAuthenticationToken authentication)
throws AuthenticationException {
if (authentication.getCredentials() == null) {
logger.debug("Authentication failed: no credentials provided");
throw new BadCredentialsException("Authentication failed: no credentials provided");
}
String presentedPassword = authentication.getCredentials().toString();
if (!passwordEncoder.matches(presentedPassword, userDetails.getPassword())) {
logger.debug("Authentication failed: password does not match stored value");
throw new BadCredentialsException("Authentication failed: password does not match stored value");
}
}
/***
* 描述:创建一个已经通过验证的用户实例
* 该方法由SpringSecurity源码魔改得到
* @param principal
* @param authentication
* @param user
* @Return : org.springframework.security.core.Authentication
* @Author : HuangXiahao
* @Date : 2020/6/14 15:52
*/
protected Authentication createSuccessAuthentication(Object principal,
Authentication authentication, UserDetails user) {
UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(
principal, authentication.getCredentials(),
user.getAuthorities());
result.setDetails(authentication.getDetails());
return result;
}
}
package com.tykj.user.authencation.token;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.core.GrantedAuthority;
import java.util.Collection;
/**
* 描述:统一登录平台用户凭证
* @author HuangXiahao
* @version V1.0
* @class JwtAuthencationToken
* @packageName com.example.personnelmanager.common.authencationToken
* @data 2020/6/13
**/
public class JwtAuthencationToken extends AbstractAuthenticationToken {
private final Object principal;
private Object credentials;
/**
* 构造一个待验证的Jwt用户凭证
* @param principal
*/
public JwtAuthencationToken(Object principal) {
super(null);
this.principal = principal;
this.credentials = null;
setAuthenticated(false);
}
/**
* 构造一个已经通过验证的Jwt用户凭证
* @param principal
*/
public JwtAuthencationToken(Object principal, Collection<? extends GrantedAuthority> authorities) {
super(authorities);
this.principal = principal;
this.credentials = null;
super.setAuthenticated(true);
}
@Override
public Object getCredentials() {
return this.credentials;
}
@Override
public Object getPrincipal() {
return this.principal;
}
/***
* 设置构造是否成功标记
*
* @param isAuthenticated
* @Return : void
*/
@Override
public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
if (isAuthenticated) {
throw new IllegalArgumentException(
"Cannot set this token to trusted - use constructor which takes a GrantedAuthority list instead");
}
super.setAuthenticated(false);
}
@Override
public void eraseCredentials() {
super.eraseCredentials();
credentials = null;
}
}
package com.tykj.user.config;
import com.tykj.user.dao.AuthorityDao;
import com.tykj.user.dao.StorageKeyDao;
import com.tykj.user.pojo.Authority;
import com.tykj.user.pojo.StorageKey;
import com.tykj.user.pojo.vo.Keys;
import com.tykj.user.util.CipherUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class ApplicationRunnerImpl implements ApplicationRunner {
@Autowired
private StorageKeyDao storageKeyDao;
@Autowired
private AuthorityDao authorityDao;
@Override
public void run(ApplicationArguments args) throws Exception {
List<StorageKey> storageKeyList = storageKeyDao.findAll();
if (storageKeyList.size() == 0){
StorageKey storageKey = new StorageKey();
//生成签名公私钥
Keys signKeys = CipherUtil.generateKeys();
storageKey.setSignPrivateKey(signKeys.getPrivateKey());
storageKey.setSignPublicKey(signKeys.getPublicKey());
//生成加密公私钥
Keys rsaKeys = CipherUtil.generateKeys();
storageKey.setRsaPrivateKey(rsaKeys.getPrivateKey());
storageKey.setRsaPublicKey(rsaKeys.getPublicKey());
storageKeyDao.save(storageKey);
}
assignAuthority();
}
public void assignAuthority(){
List<Authority> authorityList = authorityDao.findByName("集成页面配置");
if (authorityList == null){
Authority authority1 = new Authority();
authority1.setName("集成页面配置");
authority1.setType(1);
authorityDao.save(authority1);
}
}
}
\ No newline at end of file
package com.tykj.user.config;
import com.tykj.user.dao.OrganizationDao;
import com.tykj.user.dao.UserDao;
import com.tykj.user.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class AssignRole implements ApplicationRunner {
@Autowired
private OrganizationDao organizationDao;
@Autowired
private UserDao userDao;
@Autowired
PasswordEncoder passwordEncoder;
@Override
public void run(ApplicationArguments args) throws Exception {
//先检查是否管理员、安全员、审计员
if (userDao.findByType(1) == null){
User user = new User();
creatRole(1,user);
userDao.save(user);
}
if (userDao.findByType(2) == null){
User user1 = new User();
creatRole(2,user1);
userDao.save(user1);
}
if (userDao.findByType(3) == null){
User user2 = new User();
creatRole(3,user2);
userDao.save(user2);
}
}
public void creatRole(Integer type,User user) {
user.setType(type);
switch (type) {
case 1:
user.setRealName("管理员");
user.setUsername("管理员");
user.setId("1");
user.setCreateTime(new Date());
user.setPassword(passwordEncoder.encode("qwer1234"));
break;
case 2:
user.setRealName("安全员");
user.setUsername("安全员");
user.setId("2");
user.setCreateTime(new Date());
user.setPassword(passwordEncoder.encode("qwer1234"));
break;
case 3:
user.setRealName("审计员");
user.setUsername("审计员");
user.setId("3");
user.setCreateTime(new Date());
user.setPassword(passwordEncoder.encode("qwer1234"));
break;
}
}
}
package com.tykj.user.config;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;
import org.springframework.util.unit.DataSize;
import javax.servlet.MultipartConfigElement;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
/**
* 描述:用于存放一些需要被Spring统一管理的Bean
*
* @author HuangXiahao
* @version V1.0
* @class BeanConfig
* @packageName com.example.demo.common.config
* @data 2020/4/21
**/
@Configuration
public class BeanConfig {
/**
* Validator配置
* @return
*/
@Bean
public Validator validator(){
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
return validatorFactory.getValidator();
}
/**
* 密码加密验证类
**/
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
factory.setMaxFileSize(DataSize.parse("20480KB")); //KB,MB
/// 设置总上传数据总大小
factory.setMaxRequestSize(DataSize.parse("1024000KB"));
return factory.createMultipartConfig();
}
@Bean
public CookieSerializer httpSessionIdResolver() {
DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
cookieSerializer.setUseHttpOnlyCookie(false);
cookieSerializer.setSameSite("None");
cookieSerializer.setCookiePath("/");
cookieSerializer.setUseSecureCookie(true);
return cookieSerializer;
}
}
package com.tykj.user.config;
import org.apache.http.client.CookieStore;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.config.SocketConfig;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.NoConnectionReuseStrategy;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.net.ssl.SSLContext;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;
@Configuration
public class HttpClientConfig {
/**
* HttpClient的Cookie管理器,可在其他类中调用该Bean清空Cookie缓存。
* 主要针对某些网站Cookie多次使用会造成Cookie失效的问题
* @return
*/
@Bean
public CookieStore cookieStore(){
CookieStore cookieStore = new BasicCookieStore();
return cookieStore;
}
/**
* HttpClient的配置,所返回的CloseableHttpClient可以用来发送网络请求。
* @return
* @throws KeyStoreException
* @throws NoSuchAlgorithmException
* @throws KeyManagementException
*/
@Bean
public CloseableHttpClient client() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
TrustStrategy acceptingTrustStrategy = (X509Certificate[] x509Certificates, String s) -> true;
SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
.loadTrustMaterial(null, acceptingTrustStrategy)
.build();
SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext
,null, null, NoopHostnameVerifier.INSTANCE);
SocketConfig socketConfig = SocketConfig.custom()
.setSoKeepAlive(false)
.setSoLinger(1)
.setSoReuseAddress(true)
.setSoTimeout(5000)
.setTcpNoDelay(true).build();
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", csf)
.build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
//最大连接数3000
connectionManager.setMaxTotal(3000);
//路由链接数400
connectionManager.setDefaultMaxPerRoute(400);
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(5000)
.setConnectTimeout(5000)
.setConnectionRequestTimeout(5000)
.setMaxRedirects(1)
.setRedirectsEnabled(true)
.build();
return HttpClients.custom().setDefaultRequestConfig(requestConfig)
.setConnectionManager(connectionManager)
.setDefaultSocketConfig(socketConfig)
.setConnectionReuseStrategy(new NoConnectionReuseStrategy())
.evictExpiredConnections()
.evictIdleConnections(30, TimeUnit.SECONDS)
.setRetryHandler(new DefaultHttpRequestRetryHandler())
.disableAutomaticRetries()
.disableRedirectHandling()
.setDefaultCookieStore(cookieStore())
.build();
}
}
package com.tykj.user.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
//@Value("/Users/czq/Desktop/test/")
@Value("/home/tykj/Desktop/icon/")
private String path;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 将/static/**访问映射到classpath:/mystatic/
registry.addResourceHandler("/file/**").addResourceLocations("file:" + path);
}
}
package com.tykj.user.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author huangjiafu
* @version V1.0
* @data 2021/8/19 10:54
**/
@Configuration
public class TokenConfig implements WebMvcConfigurer {
@Autowired
TokenInterceptor tokenInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注册TestInterceptor拦截器
// InterceptorRegistration registration = registry.addInterceptor(tokenInterceptor);
// registration.addPathPatterns("/*/*"); //路径都被拦截
// registration.excludePathPatterns( //添加不拦截路径
// "/*/*.html", //html静态资源
// "/*/*.js", //js静态资源
// "/*/*.css", //css静态资源
// "/*/*.woff",
// "/*/*.ttf",
// "http://localhost:8989/swagger-ui.html#/"
// );
}
}
package com.tykj.user.config;
import com.tykj.user.dao.StorageKeyDao;
import com.tykj.user.pojo.StorageKey;
import com.tykj.user.pojo.User;
import com.tykj.user.pojo.UserDetail;
import com.tykj.user.pojo.vo.uservo.CurrentUserVo;
import com.tykj.user.util.AuthenticationUtils;
import com.tykj.user.util.CipherUtil;
import com.tykj.user.util.SpringContextHolder;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
* @author huangjiafu
* @version V1.0
* @data 2021/8/19 10:52
**/
@Component
public class TokenInterceptor implements HandlerInterceptor {
@Autowired
private StorageKeyDao storageKeyDao;
@Autowired
AuthenticationUtils authenticationUtils;
//存当前用户
static HashMap<String, CurrentUserVo> map = new HashMap<>();
public TokenInterceptor() {
}
public static HashMap<String, CurrentUserVo> getMap() {
return map;
}
/**
* 在请求处理之前进行调用(Controller方法调用之前)
* @return
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
System.out.println("拦截。。。。。。。。。。。。。。");
String token = request.getHeader("token");
// JSONObject jsonObject = JSONObject.fromObject(token);
UserDetail authentication = authenticationUtils.getAuthentication();
StorageKeyDao storageKeyDao= SpringContextHolder.getBean(StorageKeyDao.class);
List<StorageKey> storageKeys = storageKeyDao.findAll();
System.out.println("11111:"+storageKeys.get(0));
String decrypt = CipherUtil.decrypt(token, CipherUtil.string2PrivateKey(storageKeys.get(0).getRsaPrivateKey()));
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(CipherUtil.string2PublicKey(storageKeys.get(0).getSignPublicKey())).parseClaimsJws(decrypt);
Claims body = claimsJws.getBody();
System.out.println("77777777:"+body);
Object username = body.get("username");
String username1 = username.toString();
User user = authentication.toUser();
if (! user.equals(username1)){
PrintWriter writer = response.getWriter();
writer.print("token中的用户与当前登录用户不符");
return false;
}
Date loginTime = UserMap.userMap.get(username1);
if (loginTime == null){
PrintWriter writer = response.getWriter();
writer.print("用户未登录");
return false;
}
long time = (System.currentTimeMillis()-loginTime.getTime())/(1000);
if (time > 30){
PrintWriter writer = response.getWriter();
writer.print("用户登录已过期");
return false;
}
UserMap.userMap.put(username1,new Date());
return true;
}
/**
* 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
// System.out.println("拦截器1 postHandle: ");
}
/**
* 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// System.out.println("拦截器1 afterCompletion: ");
}
}
package com.tykj.user.config;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class UserMap {
public static Map<String, Date> userMap = new HashMap<>();
}
package com.tykj.user.controller;
import com.sun.istack.NotNull;
import com.tykj.user.pojo.Authority;
import com.tykj.user.pojo.LogContent;
import com.tykj.user.pojo.vo.ServerResponse;
import com.tykj.user.pojo.vo.uservo.AuthorityLogVo;
import com.tykj.user.pojo.vo.uservo.AuthorityNameVo;
import com.tykj.user.pojo.vo.uservo.AuthorityTypeVo;
import com.tykj.user.pojo.vo.uservo.AuthorityVo;
import com.tykj.user.service.AuthorityService;
import com.tykj.user.service.LogContentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@RestController
@RequestMapping("/authority")
@Api(tags = "权限管理")
public class AuthorityController {
@Autowired
private AuthorityService authorityService;
@Autowired
private LogContentService logContentService;
@ApiOperation("新增权限")
@PostMapping("/add")
public ServerResponse add(@Validated @RequestBody AuthorityVo authorityVo){
LogContent logContent = new LogContent();
logContent.setOperator(authorityVo.getLoginer());
logContent.setOperateTime(new Date());
logContent.setContent("新增权限");
Authority authority = authorityService.save(authorityVo.getAuthority());
if (authority != null){
logContent.setResult("操作成功");
logContentService.save(logContent);
return ServerResponse.ok(authority);
}
logContent.setResult("操作失败");
logContentService.save(logContent);
return ServerResponse.error("新增权限失败");
}
@ApiOperation("修改权限信息")
@PostMapping("/update")
public ServerResponse update(@Validated @RequestBody AuthorityVo authorityVo) {
LogContent logContent = new LogContent();
logContent.setOperator(authorityVo.getLoginer());
logContent.setOperateTime(new Date());
logContent.setContent("修改权限信息");
Authority authority = authorityService.update(authorityVo.getAuthority());
if (authority != null){
logContent.setResult("操作成功");
logContentService.save(logContent);
return ServerResponse.ok(authority);
}
logContent.setResult("操作失败");
logContentService.save(logContent);
return ServerResponse.error("新增权限失败");
}
@ApiOperation("根据id 查看权限详情")
@PostMapping("/findById")
public ServerResponse findById(@Validated @RequestBody AuthorityLogVo authorityLogVo) {
Authority authority = authorityService.findById(authorityLogVo.getId());
if (authority != null) {
return ServerResponse.ok(authority);
}
return ServerResponse.error("未查询到该权限详情");
}
@ApiOperation("删除权限")
@DeleteMapping("/delete")
public ServerResponse delete(@NotNull @RequestBody AuthorityLogVo authorityLogVo){
LogContent logContent = new LogContent();
logContent.setOperator(authorityLogVo.getLoginer());
logContent.setOperateTime(new Date());
logContent.setContent("删除权限");
try{
authorityService.delete(authorityLogVo.getId());
logContent.setResult("操作成功");
logContentService.save(logContent);
return ServerResponse.ok("删除成功");
}catch (Exception e){
logContent.setResult("操作失败");
logContentService.save(logContent);
return ServerResponse.error("删除失败");
}
}
@ApiOperation("查看所有权限")
@GetMapping("/findAll/{loginer}")
public ServerResponse findAll(@NotNull @PathVariable String loginer) {
List<Authority> authorityList = authorityService.findAll();
if (authorityList != null){
return ServerResponse.ok(authorityList);
}
return ServerResponse.error("查看失败");
}
@ApiOperation("根据类型 查看权限详情")
@PostMapping("/findByType")
public ServerResponse findById(@Validated @RequestBody AuthorityTypeVo authorityTypeVo) {
List<Authority> authorityList = authorityService.findByType(authorityTypeVo.getType());
if (authorityList != null) {
return ServerResponse.ok(authorityList);
}
return ServerResponse.error("未查询到该类型权限详情");
}
@ApiOperation("根据名称 查看权限详情")
@PostMapping("/findByName")
public ServerResponse findByName(@Validated @RequestBody AuthorityNameVo authorityNameVo) {
String name = authorityNameVo.getName();
List<Authority> authorityList = new ArrayList<>();
if (name==null){
authorityList = authorityService.findAll();
}
authorityList = authorityService.findByNameLike(authorityNameVo.getName());
if (authorityList!=null){
return ServerResponse.ok(authorityList);
}
return ServerResponse.error("未查询到权限");
}
}
package com.tykj.user.controller;
import com.tykj.user.pojo.LogContent;
import com.tykj.user.pojo.vo.LogContentVo;
import com.tykj.user.pojo.vo.PageResponse;
import com.tykj.user.pojo.vo.ServerResponse;
import com.tykj.user.pojo.vo.uservo.LogVo;
import com.tykj.user.service.LogContentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
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("/logContent")
@Api(tags = "日志管理")
public class LogContentController {
@Autowired
private LogContentService logContentService;
@ApiOperation("根据id 查看日志详情")
@PostMapping("/findById")
public ServerResponse findById(@Validated @RequestBody LogVo logVo){
LogContent logContent1 = logContentService.findById(logVo.getId());
if (logContent1 != null){
return ServerResponse.ok(logContent1);
}
return ServerResponse.error("未查到该日志信息");
}
@ApiOperation("查询日志列表")
@PostMapping("/userList")
public ServerResponse select(@Validated @RequestBody LogContentVo logContentVo){
PageResponse<LogContent> logContentList = logContentService.select(logContentVo);
if (logContentList != null){
return ServerResponse.ok(logContentList);
}
return ServerResponse.error("未查到日志信息");
}
}
package com.tykj.user.controller;
import com.tykj.user.pojo.LogContent;
import com.tykj.user.pojo.Organization;
import com.tykj.user.pojo.vo.OrganizationVo;
import com.tykj.user.pojo.vo.ServerResponse;
import com.tykj.user.pojo.vo.uservo.FindOrganizationVo;
import com.tykj.user.pojo.vo.uservo.OrganizationLogVo;
import com.tykj.user.service.LogContentService;
import com.tykj.user.service.OrganizationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
@RestController
@RequestMapping("/organization")
@Api(tags = "组织架构管理")
public class OrganizationController {
@Autowired
private OrganizationService organizationService;
@Autowired
private LogContentService logContentService;
@ApiOperation("新增组织架构")
@PostMapping("/addorg")
public ServerResponse addorg(@Validated @RequestBody OrganizationLogVo organizationLogVo){
LogContent logContent = new LogContent();
logContent.setOperator(organizationLogVo.getLoginer());
logContent.setOperateTime(new Date());
logContent.setContent("新增组织架构");
if(organizationLogVo.getOrganization()!=null) {
Organization organization1 = organizationService.add(organizationLogVo.getOrganization());
if (organization1 != null) {
logContent.setResult("操作成功");
logContentService.save(logContent);
return ServerResponse.ok(organization1);
}
}
logContent.setResult("操作失败");
logContentService.save(logContent);
return ServerResponse.error("新增组织架构失败!");
}
@ApiOperation("修改组织架构信息")
@PostMapping("/update")
public ServerResponse update(@Validated @RequestBody OrganizationLogVo organizationLogVo){
LogContent logContent = new LogContent();
logContent.setOperator(organizationLogVo.getLoginer());
logContent.setOperateTime(new Date());
logContent.setContent("修改组织架构信息");
Organization organization1 = organizationService.update(organizationLogVo.getOrganization());
if (organization1 != null){
logContent.setResult("操作成功");
logContentService.save(logContent);
return ServerResponse.ok(organization1);
}
logContent.setResult("操作失败");
logContentService.save(logContent);
return ServerResponse.error("修改组织架构失败!");
}
@ApiOperation("根据组织架构id 查看组织架构详情")
@PostMapping("/findById")
public ServerResponse findUserById(@Validated @RequestBody FindOrganizationVo findOrganizationVo){
Organization organization = organizationService.findById(findOrganizationVo.getId());
if (organization != null){
return ServerResponse.ok(organization);
}
return ServerResponse.error("未查到该组织架构");
}
@ApiOperation("查询全部组织架构")
@GetMapping("/findAll/{name}")
public ServerResponse findByName(String name){
List<Organization> organizationList = organizationService.findByOrganizationNameLike(name);
if (organizationList.size()==0){
organizationList = organizationService.findAll();
}
List<OrganizationVo> organizationVos = organizationService.find(organizationList);
if (organizationVos != null){
return ServerResponse.ok(organizationVos);
}
return ServerResponse.error("查看组织架构失败");
}
@ApiOperation("根据id删除组织架构")
@DeleteMapping("/delete")
public ServerResponse delete(@Validated @RequestBody FindOrganizationVo findOrganizationVo) {
LogContent logContent = new LogContent();
logContent.setOperator(findOrganizationVo.getLoginer());
logContent.setOperateTime(new Date());
logContent.setContent("删除组织架构");
try{
organizationService.delete(findOrganizationVo.getId());
logContent.setResult("操作成功");
logContentService.save(logContent);
return ServerResponse.ok("删除成功");
}catch (Exception e){
logContent.setResult("操作失败");
logContentService.save(logContent);
return ServerResponse.error("删除失败");
}
}
}
package com.tykj.user.controller;
import com.tykj.user.pojo.UserDetail;
import com.tykj.user.pojo.vo.ServerResponse;
import com.tykj.user.service.StorageKeyService;
import com.tykj.user.util.AuthenticationUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@Api(tags = "Token管理")
@RestController
@RequestMapping("/storageKey")
public class StorageKeyController {
@Autowired
StorageKeyService storageKeyService;
@Resource
AuthenticationUtils authenticationUtils;
@ApiOperation(value = "getKeys", notes = "获取rsaPrivateKey和signPublicKey", httpMethod = "POST")
@PostMapping(value = "/getKeys")
public ServerResponse getKeys(String applicationId){
return ServerResponse.ok(storageKeyService.getKeys());
}
@ApiOperation(value = "getJwtToken", notes = "获取登录校验token", httpMethod = "GET")
@GetMapping(value = "/getJwtToken")
public ServerResponse getJwtToken(String appId){
UserDetail authentication = authenticationUtils.getAuthentication();
String token = storageKeyService.generateUserToken(authentication);
return ServerResponse.ok(token);
}
}
package com.tykj.user.controller;
import com.google.common.collect.ImmutableMap;
import com.tykj.user.service.impl.SyncDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "数据同步")
@RequestMapping("/sync/data")
@RestController
public class SyncDataController {
@Autowired
private SyncDataService syncDataService;
@ApiOperation("主动触发一次数据同步操作")
@PostMapping("/execute")
public ResponseEntity execute() {
syncDataService.execute();
return ResponseEntity.ok(ImmutableMap.of("msg", "同步完成"));
}
}
package com.tykj.user.controller;
import com.sun.istack.NotNull;
import com.tykj.user.pojo.Authority;
import com.tykj.user.pojo.LogContent;
import com.tykj.user.pojo.User;
import com.tykj.user.pojo.UserAuthority;
import com.tykj.user.pojo.vo.PageResponse;
import com.tykj.user.pojo.vo.ServerResponse;
import com.tykj.user.pojo.vo.uservo.*;
import com.tykj.user.service.AuthorityService;
import com.tykj.user.service.LogContentService;
import com.tykj.user.service.UserAuthorityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Controller
@RestController()
@RequestMapping("/userAuth")
@Api(tags = "用户权限管理")
public class UserAuthorityController {
@Autowired
private UserAuthorityService userAuthorityService;
@Autowired
private LogContentService logContentService;
@Autowired
private AuthorityService authorityService;
@ApiOperation("根据用户id 查看用户权限")
@PostMapping("/findUserAuthById")
public ServerResponse findUserAuthById(@Validated @RequestBody UserAuthVo userAuthVo) {
List<UserAuthority> authorityList = userAuthorityService.findByUid(userAuthVo.getId());
if (authorityList != null) {
return ServerResponse.ok(authorityList);
}
return ServerResponse.error("查询用户权限失败");
}
/*
@ApiOperation("为用户分配权限")
@PostMapping("/addUserAuth")
public ServerResponse addAuth(@Validated @RequestBody UserAuthLogVo userAuthLogVo){
LogContent logContent = new LogContent();
logContent.setOperator(userAuthLogVo.getLoginer());
logContent.setOperateTime(new Date());
logContent.setContent("为用户分配权限");
ArrayList<UserAuthority> userAuthorities = new ArrayList<>();
List<String> uids = userAuthLogVo.getUids();
Integer authId = userAuthLogVo.getAuthId();
for (String uId : uids) {
List<UserAuthority> userAuthorityList = userAuthorityService.findByUid(uId);
//根据用户id 查找用户原有的权限id
List<Integer> authIdList = userAuthorityService.findAuthByUid(uId);
//如果用户之前没有该权限 新增用户权限
if (!authIdList.contains(authId)){
Authority authority = authorityService.findById(authId);
UserAuthority userAuthority = new UserAuthority();
userAuthority.setAuthorityId(authId);
userAuthority.setUid(uId);
userAuthority.setName(authority.getName());
userAuthority.setType(authority.getType());
userAuthorityList.add(userAuthorityService.save(userAuthority));
}
userAuthorities.addAll(userAuthorityList);
}
if (userAuthorities!= null){
logContent.setResult("操作成功");
logContentService.save(logContent);
return ServerResponse.ok(userAuthorities);
}
logContent.setResult("操作失败");
logContentService.save(logContent);
return ServerResponse.error("分配权限失败");
}
*/
@ApiOperation("为用户分配权限")
@PostMapping("/addUserAuth")
public ServerResponse addAuth(@Validated @RequestBody UserAuthLogVo userAuthLogVo) {
LogContent logContent = new LogContent();
logContent.setOperator(userAuthLogVo.getLoginer());
logContent.setOperateTime(new Date());
logContent.setContent("为用户分配权限");
ArrayList<UserAuthsVo> orgAuthsVos = new ArrayList<>();
List<String> uIds = userAuthLogVo.getUIds();
for (String uId : uIds) {
UserAuthsVo userAuthsVo = new UserAuthsVo();
ArrayList<Integer> authList = new ArrayList<>();
userAuthsVo.setUId(uId);
List<UserAuthority> userAuthorityList = userAuthorityService.findByUid(uId);
List<Integer> authIdList = userAuthorityService.findAuthByUid(uId);
List<Integer> authIds = userAuthLogVo.getAuthIds();
//先删除之前多余的
for (Integer authId : authIdList) {
if (!authIds.contains(authId)) {
//根据用户名和权限id 删除
UserAuthority userAuthority = userAuthorityService.findByUidAndAuthorityId(uId, authId);
userAuthorityList.remove(userAuthority);
userAuthorityService.delete(userAuthority);
}
}
//新增权限
for (Integer authId : authIds) {
Authority authority = authorityService.findById(authId);
UserAuthority userAuthority1 = userAuthorityService.findByUidAndAuthorityId(uId, authId);
if (userAuthority1 == null && authority != null) {
UserAuthority userAuthority = new UserAuthority();
userAuthority.setAuthorityId(authId);
userAuthority.setUid(uId);
userAuthority.setName(authority.getName());
userAuthority.setType(authority.getType());
userAuthorityList.add(userAuthorityService.save(userAuthority));
}
}
if (userAuthorityList != null) {
logContent.setResult("操作成功");
logContentService.save(logContent);
return ServerResponse.ok(userAuthorityList);
}
}
logContent.setResult("操作失败");
logContentService.save(logContent);
return ServerResponse.error("分配权限失败");
}
@ApiOperation("根据权限id 查看所有用户")
@PostMapping("/findByAuthId")
public ServerResponse findByAuthId(@Validated @RequestBody AuthUserVo authUserVo) {
int page = authUserVo.getPage();
int size = authUserVo.getSize();
PageResponse<User> userList = userAuthorityService.findByAuthId(authUserVo.getId(), page, size);
if (userList != null) {
return ServerResponse.ok(userList);
}
return ServerResponse.error("未查到用户");
}
@ApiOperation("为用户删除某个权限")
@DeleteMapping("/delete")
public ServerResponse delete(@NotNull @RequestBody DelAuthUserVo delAuthUserVo) {
LogContent logContent = new LogContent();
logContent.setOperator(delAuthUserVo.getLoginer());
logContent.setOperateTime(new Date());
logContent.setContent("为用户删除权限");
try {
userAuthorityService.delete(delAuthUserVo.getAuthId(), delAuthUserVo.getUId());
} catch (Exception e) {
logContent.setResult("操作失败");
logContentService.save(logContent);
return ServerResponse.error("删除失败");
}
logContent.setResult("操作成功");
logContentService.save(logContent);
return ServerResponse.ok("删除成功");
}
@ApiOperation("为权限分配用户")
@PostMapping("/addAuthUser")
public ServerResponse addAuthUser(@Validated @RequestBody AuthUserLogVo authUserLogVo) {
Integer authId = authUserLogVo.getAuthId();
List<String> uIds = authUserLogVo.getUIds();
List<UserAuthority> userAuthorities = new ArrayList<>();
Authority authority = authorityService.findById(authId);
//根据权限查出所有用户
List<User> userList = userAuthorityService.findByAuthId(authId);
System.out.println(userList.toArray());
System.out.println(userList.size());
//删除原来的用户权限 //4,5,6,14
for (User user : userList) {
if (user!=null && !uIds.contains(user.getId())) {
UserAuthority userAuthority = userAuthorityService.findByUidAndAuthorityId(user.getId(), authId);
userAuthorityService.delete(userAuthority);
}
if (user!=null && uIds.contains(user.getId())) {
uIds.remove(user.getId());
UserAuthority userAuthority = userAuthorityService.findByUidAndAuthorityId(user.getId(), authId);
userAuthorities.add(userAuthority);
}
}
//新添加的
for (String uId : uIds) {
UserAuthority userAuthority = new UserAuthority();
userAuthority.setUid(uId);
userAuthority.setAuthorityId(authId);
userAuthority.setType(authority.getType());
userAuthority.setName(authority.getName());
userAuthority.setName(authority.getName());
userAuthorityService.save(userAuthority);
userAuthorities.add(userAuthority);
}
return ServerResponse.ok(userAuthorities);
}
}
package com.tykj.user.dao;
import com.tykj.user.pojo.Authority;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface AuthorityDao extends JpaRepository<Authority, Integer >, JpaSpecificationExecutor<Authority> {
List<Authority> findByName(String name);
List<Authority> findByAppId(Integer appId);
List<Authority> findByType(Integer type);
List<Authority> findByNameLike(String name);
}
package com.tykj.user.dao;
import com.tykj.user.pojo.AuthorityOrganization;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface AuthorityOrganizationDao extends JpaRepository<AuthorityOrganization, String >, JpaSpecificationExecutor<AuthorityOrganization> {
List<AuthorityOrganization> findByOrgId(Integer orgId);
AuthorityOrganization findByOrgIdAndAuthId(Integer orgId,Integer authId);
List<AuthorityOrganization> findByAuthId(Integer authId);
@Query(value = "select a from AuthorityOrganization a where a.authId=:authId ")
Page<AuthorityOrganization> findByAuthIdPageable(@Param("authId") Integer authId, Pageable pageable);
}
package com.tykj.user.dao;
import com.tykj.user.pojo.LogContent;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
@Repository
public interface LogContentDao extends JpaRepository<LogContent, Integer>, JpaSpecificationExecutor<LogContent> {
}
package com.tykj.user.dao;
import com.tykj.user.pojo.Organization;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface OrganizationDao extends JpaRepository<Organization, Integer>, JpaSpecificationExecutor<Organization> {
List<Organization> findByOrganizationNameLike(String organizationName);
List<Organization> findAllByCode(String code);
}
package com.tykj.user.dao;
import com.tykj.user.pojo.StorageKey;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
@Repository
public interface StorageKeyDao extends JpaRepository<StorageKey, Integer >, JpaSpecificationExecutor<StorageKey> {
}
package com.tykj.user.dao;
import com.tykj.user.pojo.UserAuthority;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserAuthorityDao extends JpaRepository<UserAuthority, Integer>, JpaSpecificationExecutor<UserAuthority> {
List<UserAuthority> findByUid(String uid);
UserAuthority findByUidAndAuthorityId(String uid, Integer authorityId);
List<UserAuthority> findByAuthorityId(Integer authorityId);
}
package com.tykj.user.dao;
import com.tykj.user.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserDao extends JpaRepository<User, String >, JpaSpecificationExecutor<User> {
User findByIdAndDelStatus(String id,Integer delStatus);
/**
* 根据用户名查询用户
* @param username 用户名
* @return
*/
User findByUsername(String username);
/**
* 根据用户类型查找用户
* @param type
* @return
*/
User findByType(Integer type);
List<User> findAllByDelStatus(Integer delStatus);
/**
* 根据组织架构id 查询用户
* @param organizationId
* @return
*/
List<User> findAllByOrganizationIdAndDelStatus(Integer organizationId,Integer delStatus);
/**
* 根据密级 查找用户
* @param customerLever
* @param delStatus
* @return
*/
List<User> findByCustomerLeverAndDelStatus(String customerLever,Integer delStatus);
/**
* 根据删除状态 和用户真实姓名查询用户
* @param delStatus
* @param realName
* @return
*/
List<User> findByDelStatusAndRealNameLike(Integer delStatus,String realName);
}
package com.tykj.user.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("权限表")
public class Authority {
@Id
@ApiModelProperty(value = "权限id")
private Integer id;
@ApiModelProperty(value = "应用名称")
private String appName;
@ApiModelProperty(value = "应用的APP_ID,唯一标识" ,example = "0")
private Integer appId;
@ApiModelProperty(value = "权限值")
private String value;
@ApiModelProperty(value = "权限名称")
private String name;
@ApiModelProperty(value = "权限类型 1系统权限 2客户端权限")
private Integer type;
}
package com.tykj.user.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("权限组织架构表")
public class AuthorityOrganization {
@Id
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "组织id")
private Integer orgId;
@ApiModelProperty(value = "权限id")
private Integer authId;
@ApiModelProperty(value = "权限名称")
private String name;
@ApiModelProperty(value = "权限类型 1系统权限 2客户端权限")
private Integer type;
}
package com.tykj.user.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.Date;
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("日志")
public class LogContent {
@Id
@ApiModelProperty(value = "日志id")
private Integer id;
@ApiModelProperty(value = "操作人")
private String operator;
@ApiModelProperty(value = "操作时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date operateTime;
@ApiModelProperty(value = "操作内容")
private String content;
@ApiModelProperty(value = "操作结果")
private String result;
}
package com.tykj.user.pojo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.tykj.user.pojo.vo.OrganizationVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.ArrayList;
@JsonIgnoreProperties(ignoreUnknown = true)
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("组织架构")
public class Organization {
@Id
@ApiModelProperty(value = "机构组织id")
private Integer id;
@ApiModelProperty(value = "机构编码")
private String code;
@ApiModelProperty(value = "机构名称")
private String organizationName;
@ApiModelProperty(value = "上级id")
private Integer pid = 0;
@ApiModelProperty(value = "上级机构名称")
private String pname;
@ApiModelProperty(value = "组织介绍")
private String description;
@ApiModelProperty(value = "排序号")
private Integer sortNo;
@ApiModelProperty(value = "规范名称")
private String specificationName;
@ApiModelProperty(value = "规范编码")
private String specificationCode;
//private List<Organization> children;
public OrganizationVo toVo(){
return new OrganizationVo(id,code,organizationName, new ArrayList(),new ArrayList<>());
}
}
package com.tykj.user.pojo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
@JsonIgnoreProperties(ignoreUnknown = true)
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("存储私密钥")
@Table
public class StorageKey {
@Id
@ApiModelProperty(value = "权限id")
private Integer id;
@Lob
@ApiModelProperty(value = "应用签名公钥,由系统生成。公钥发放给应用的负责人,用于对JWT验签")
private String signPublicKey ;
@Lob
@ApiModelProperty(value = "应用签名私钥,由系统生成。私钥用于对JWT进行签名")
private String signPrivateKey ;
@Lob
@ApiModelProperty(value = "应用jwt加密公钥,由系统生成。用于对JWT加密")
private String rsaPublicKey ;
@Lob
@ApiModelProperty(value = "应用jwt解密私钥,由系统生成。私钥发放给应用的负责人,用于对JWT解密")
private String rsaPrivateKey ;
}
package com.tykj.user.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.programmaticallyspeaking.aptdemo.NoAutoIncreament;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.CreatedDate;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.Date;
import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("用户")
@Table
public class User {
@Id
@ApiModelProperty(value = "用户编号",example = "1")
@NoAutoIncreament
private String id;
@ApiModelProperty(value = "用户姓名")
private String realName;
@ApiModelProperty(value = "用户名")
private String username;
@ApiModelProperty(value = "经过加密的密码")
private String password="qwer1234" ;
@ApiModelProperty(value = "联系方式")
private String phone;
@ApiModelProperty(value = "锁定状态(0为未锁,1为锁死)")
private Integer locked = 0;
@ApiModelProperty(value = "用户的性别")
private String sex ;
@ApiModelProperty(value = "身份证号")
private String idCardNumber;
@ApiModelProperty(value = "头像或证件照")
private String picturePath;
@ApiModelProperty(value = "删除状态:1.未删除;2.删除")
private Integer delStatus= 1;
@ApiModelProperty(value = "如果用户姓名在数据库内重复,当第二个重复的用户姓名,注册进系统时,该数字加1。例如:张三张三2张三3")
private Integer repeatsNum = 0;
@CreatedDate
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty(value = "机构编码")
private String organizationCode;
@ApiModelProperty(value = "机构id")
private Integer organizationId;
@ApiModelProperty(value = "机构名称")
private String organizationName;
@ApiModelProperty(value = "用户类型")
private String customerType;
@ApiModelProperty(value = "用户岗位")
private String organizationPost;
@ApiModelProperty(value = "用户职务")
private String customerTitle;
@ApiModelProperty(value = "用户密级")
private String customerLever;
@ApiModelProperty(value = "用户类型 0普通用户 1管理员 2安全员 3审计员")
private Integer type = 0;
@Transient
private List<Organization> organizationList;
@Transient
private List<String> groupStrings;
}
package com.tykj.user.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("用户")
@Table
public class UserAuthority {
@Id
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "用户编号",example = "1")
private String uid;
@ApiModelProperty(value = "权限id")
private Integer authorityId;
@ApiModelProperty(value = "权限名称")
private String name;
@ApiModelProperty(value = "权限类型 1系统权限 2客户端权限")
private Integer type;
}
package com.tykj.user.pojo;
import org.springframework.beans.BeanUtils;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.*;
/**
* 描述: 用户类
* 继承了SpringSecurity的UserDtails
* 用于SpringSecurity框架的用户数据传输
*
* @author HuangXiahao
* @version V1.0
* @class UserDetailVo
* @packageName com.example.personnelmanager.entity.vo
* @data 2020/5/14
**/
public class UserDetail extends User implements UserDetails {
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
//todo 权限列表
List<GrantedAuthority> simpleGrantedAuthorities = new ArrayList<>();
return simpleGrantedAuthorities;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
//如果用户被标记删除则该用户不可用
if (getDelStatus()==1){
return true;
}else {
return false;
}
}
public User toUser(){
User user = new User();
BeanUtils.copyProperties(this,user);
return user;
}
//存在jwt中的数据
public Map<String,Object> toMap(){
Map<String, Object> userInfoMap = new HashMap<>();
userInfoMap.put("type","user");
userInfoMap.put("id",getId());
userInfoMap.put("username", getUsername());
userInfoMap.put("realName", getRealName());
userInfoMap.put("idCardNumber", getIdCardNumber());
userInfoMap.put("phone", getPhone());
userInfoMap.put("sex", getSex());
userInfoMap.put("organizationCode", getOrganizationCode());
return userInfoMap;
}
}
package com.tykj.user.pojo.vo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "jwt")
public class JwtSecurityProperties {
/**
* Request Headers : Authorization
*/
private String header;
/**
* 令牌前缀,最后留个空格 Bearer
*/
private String tokenStartWith;
/**
* Base64对该令牌进行编码
*/
private String base64Secret;
/**
* 令牌过期时间 此处单位/毫秒
*/
private Long tokenValidityInSeconds;
/**
* 返回令牌前缀
*/
public String getTokenStartWith() {
return tokenStartWith + " ";
}
}
\ No newline at end of file
package com.tykj.user.pojo.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @author huangjiafu
* @version V1.0
* @data 2021/6/23 11:25
**/
@Data
@AllArgsConstructor
public class Keys {
/**
* 公钥
*/
public String publicKey;
/**
* 私钥
*/
public String privateKey;
}
package com.tykj.user.pojo.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LogContentVo {
@ApiModelProperty(value = "操作人")
private String operator;
@ApiModelProperty(value = "操作结果")
private String result;
@ApiModelProperty(value = "操作结果")
private String sortType;
@ApiModelProperty(value = "开始时间")
private Date startTime;
@ApiModelProperty(value = "结束时间")
private Date finishTime;
@ApiModelProperty(value = "请求页码")
private int page;
@ApiModelProperty(value = "请求数量")
private int size;
}
package com.tykj.user.pojo.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrgAuthLogVo {
@ApiModelProperty(value = "组织架构id")
private List<Integer> orgIds;
@ApiModelProperty(value = "权限id列表")
private Integer authId;
@ApiModelProperty(value = "登录用户名")
private String loginer;
}
package com.tykj.user.pojo.vo;
import com.tykj.user.pojo.vo.uservo.OrgVo;
import java.util.ArrayList;
import java.util.List;
public class OrganizationTree {
private List<OrgVo> orgList = new ArrayList<OrgVo>();
public OrganizationTree(List<OrgVo> orgList) {
this.orgList=orgList;
}
//建立树形结构
public List<OrgVo> builTree(){
List<OrgVo> treeorgs =new ArrayList<OrgVo>();
for(OrgVo orgNode : getRootNode()) {
orgNode=buildChilTree(orgNode);
treeorgs.add(orgNode);
}
return treeorgs;
}
//递归,建立子树形结构
private OrgVo buildChilTree(OrgVo pNode){
List<OrgVo> chilOrgs =new ArrayList<OrgVo>();
for(OrgVo orgNode : orgList) {
if(orgNode.getPid().equals(pNode.getId())) {
chilOrgs.add(buildChilTree(orgNode));
}
}
pNode.setChildren(chilOrgs);
return pNode;
}
//获取根节点
private List<OrgVo> getRootNode() {
List<OrgVo> rootOrgLists =new ArrayList<OrgVo>();
for(OrgVo orgNode : orgList) {
if(orgNode.getPid().equals("0")) {
rootOrgLists.add(orgNode);
}
}
return rootOrgLists;
}
}
\ No newline at end of file
package com.tykj.user.pojo.vo;
import com.tykj.user.pojo.User;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString(exclude = "childNodes")
public class OrganizationVo {
@ApiModelProperty(value = "组织id")
private Integer id ;
@ApiModelProperty(value = "机构编码")
private String code;
@ApiModelProperty(value = "组织名称")
private String organizationName;
private List<User> users;
/*@ApiModelProperty(value = "用户列表")
private List<User> userList;
*/
@ApiModelProperty(value = "子级名称")
public List<OrganizationVo> childNodes = new ArrayList<>(4);
public void addChildNode(OrganizationVo organizationVo){
childNodes.add(organizationVo);
}
}
package com.tykj.user.pojo.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Data
@ApiModel(value = "分页排序",description = "分页排序")
public class PageResponse<T> {
@ApiModelProperty(value = "当前页",example = "1")
private int currentPage;
@ApiModelProperty(value = "显示数量",example = "10")
private int size;
@ApiModelProperty(value = "总数",example = "32")
private Long count;
@ApiModelProperty(value = "分页返回数据集合")
private List<T> rowList;
}
package com.tykj.user.pojo.vo;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.io.Serializable;
@Data
public class ServerResponse<T> implements Serializable {
/**
* 错误码
*/
@JSONField(ordinal = 1)
private Integer code;
/**
* 提示信息
*/
@JSONField(ordinal = 2)
private String msg;
/**
* 具体的内容
*/
@JSONField(ordinal = 3)
private T data;
public ServerResponse(Integer code, String msg, T t){
this.code=code;
this.data=t;
this.msg=msg;
}
public ServerResponse(Integer code, String msg){
this.code=code;
this.msg=msg;
}
public static <T> ServerResponse error(int status,String data){
return new ServerResponse(status,"请求失败",data);
}
public static <T> ServerResponse error(Object data){
return new ServerResponse(400,"请求失败",data);
}
public static <T> ServerResponse noAuthority(){
return new ServerResponse(403,"没有权限","");
}
public static <T> ServerResponse badRequest(){
return new ServerResponse(400,"请求失败","");
}
public static <T> ServerResponse<T> ok(T data) {
return new ServerResponse(200,"成功",data);
}
public static <T> ServerResponse error(){
return new ServerResponse(500,"服务器出错","");
}
}
package com.tykj.user.pojo.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author huangjiafu
* @version V1.0
* @data 2021/6/25 11:13
**/
/**
* 返回的token
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("返回tokenVo")
public class TokenVo {
@ApiModelProperty(value = "应用id")
String applicationId;
@ApiModelProperty(value = "返回内容(token)")
String jwtToken;
}
package com.tykj.user.pojo.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserSelectVo {
@ApiModelProperty(value = "登录用户名")
private String loginer;
@ApiModelProperty(value = "用户姓名")
private String realName;
}
\ No newline at end of file
package com.tykj.user.pojo.vo.uservo;
import com.tykj.user.pojo.User;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AddUserVo {
@ApiModelProperty(value = "用户姓名")
private User user;
@ApiModelProperty(value = "登录用户名")
private String loginer;
}
package com.tykj.user.pojo.vo.uservo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AuthOrgLogVo {
@ApiModelProperty(value = "组织架构id")
private List<Integer> orgIds;
@ApiModelProperty(value = "权限id列表")
private List<Integer> authIds;
@ApiModelProperty(value = "登录用户名")
private String loginer;
}
package com.tykj.user.pojo.vo.uservo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AuthOrgVo {
@ApiModelProperty(value = "组织架构id")
private Integer orgId;
@ApiModelProperty(value = "登录用户名")
private String loginer;
}
package com.tykj.user.pojo.vo.uservo;
/*
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AuthSelectVo {
}
*/
package com.tykj.user.pojo.vo.uservo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AuthUserLogVo {
@ApiModelProperty(value = "人员id")
private List<String> uIds;
@ApiModelProperty(value = "权限id列表")
private Integer authId;
@ApiModelProperty(value = "登录用户名")
private String loginer;
}
package com.tykj.user.pojo.vo.uservo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AuthUserVo {
@ApiModelProperty(value = "权限id")
Integer id;
@ApiModelProperty(value = "登录用户名")
private String loginer;
@ApiModelProperty(value = "请求页码")
private int page;
@ApiModelProperty(value = "请求数量")
private int size;
}
package com.tykj.user.pojo.vo.uservo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AuthorityLogVo {
@ApiModelProperty(value = "权限id")
private Integer id;
@ApiModelProperty(value = "登录用户名")
private String loginer;
}
package com.tykj.user.pojo.vo.uservo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AuthorityNameVo {
@ApiModelProperty(value = "权限名称")
private String name;
@ApiModelProperty(value = "登录用户名")
private String loginer;
}
package com.tykj.user.pojo.vo.uservo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AuthorityTypeVo {
@ApiModelProperty(value = "权限类型")
private Integer type;
@ApiModelProperty(value = "登录用户名")
private String loginer;
}
package com.tykj.user.pojo.vo.uservo;
import com.tykj.user.pojo.Authority;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AuthorityVo {
@ApiModelProperty(value = "权限")
private Authority authority;
@ApiModelProperty(value = "登录用户名")
private String loginer;
}
package com.tykj.user.pojo.vo.uservo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ChangePasswordVo {
@ApiModelProperty(value = "用户id")
String id;
@ApiModelProperty(value = "登录用户名")
private String loginer;
@ApiModelProperty(value = "密码")
String password;
}
package com.tykj.user.pojo.vo.uservo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author huangjiafu
* @version V1.0
* @data 2021/8/24 10:24
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("当前登录用户")
public class CurrentUserVo {
@ApiModelProperty(value = "用户id")
private String userId;
@ApiModelProperty(value = "用户名")
private String username;
}
package com.tykj.user.pojo.vo.uservo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DelAuthUserVo {
@ApiModelProperty(value = "权限id")
Integer authId;
@ApiModelProperty(value = "用户id")
String uId;
@ApiModelProperty(value = "登录用户名")
private String loginer;
}
package com.tykj.user.pojo.vo.uservo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DelOrgAuthVo {
@ApiModelProperty(value = "权限id")
Integer authId;
@ApiModelProperty(value = "组织架构id")
Integer orgId;
@ApiModelProperty(value = "登录用户名")
private String loginer;
}
package com.tykj.user.pojo.vo.uservo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DelOrganizationVo {
@ApiModelProperty(value = "组织架构id")
Integer id;
@ApiModelProperty(value = "登录用户名")
private String loginer;
}
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论