init commit-resource/role/account

master
xxssyyyyssxx 2021-10-28 16:09:50 +08:00
commit 6fbad28ca4
658 changed files with 244663 additions and 0 deletions

28
.gitignore vendored 100644
View File

@ -0,0 +1,28 @@
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
/.idea/workspace.xml
*.iws
*.iml
*.ipr
/out/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
/logs/

84
build.gradle 100644
View File

@ -0,0 +1,84 @@
group 'cn.palmte'
//version '1.0'
buildscript {
ext {
springBootVersion = '1.5.7.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'application'
apply plugin: 'org.springframework.boot'
//apply plugin: 'findbugs'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenLocal()
mavenCentral()
jcenter()
maven { url 'https://jitpack.io' }
}
dependencies {
compile "org.springframework.boot:spring-boot-starter:${springBootVersion}"
compile 'org.springframework.boot:spring-boot-starter-web'
compile 'org.springframework.boot:spring-boot-starter-freemarker'
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
//compile('org.springframework.boot:spring-boot-starter-data-redis')
compile 'com.gitee.xxssyyyyssxx.unihttp:unihttp-jdk:v2.0.2'
compile 'com.gitee.xxssyyyyssxx:common-crypto:v1.8.1'
compile 'com.gitee.xxssyyyyssxx:common-db:v1.8.7'
compile 'com.gitee.xxssyyyyssxx.json:json-fastjson:v1.8.8'
compile 'com.gitee.xxssyyyyssxx:token:v1.0'
compile 'com.jfinal:jfinal:2.2'
compile 'com.alibaba:druid:1.1.9'
compile 'mysql:mysql-connector-java:6.0.6'
//compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'
//shiro
compile group: 'org.apache.shiro', name: 'shiro-spring', version: '1.4.0'
compile group: 'org.apache.shiro', name: 'shiro-core', version: '1.4.0'
compile group: 'net.mingsoft', name: 'shiro-freemarker-tags', version: '0.1'
compile group: 'org.apache.poi', name: 'poi', version: '3.17'
compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.17'
compile group: 'org.apache.poi', name: 'poi-ooxml-schemas', version: '3.17'
compile group: 'org.apache.poi', name: 'poi-scratchpad', version: '3.17'
compile group: 'commons-lang', name: 'commons-lang', version: '2.6'
compileOnly 'org.springframework.boot:spring-boot-configuration-processor'
testCompile 'junit:junit:4.12'
testCompile 'org.springframework.boot:spring-boot-starter-test'
}
compileJava.dependsOn(processResources){
}
/*
findbugs{
ignoreFailures=true
findbugsTest.enabled=false
}
tasks.withType(FindBugs) {
reports {
// xml
xml.enabled = true
html.enabled = false
}
}*/

BIN
gradle/wrapper/gradle-wrapper.jar vendored 100644

Binary file not shown.

View File

@ -0,0 +1,6 @@
#Thu Oct 28 15:13:01 CST 2021
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-rc-2-bin.zip

172
gradlew vendored 100644
View File

@ -0,0 +1,172 @@
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save ( ) {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"

84
gradlew.bat vendored 100644
View File

@ -0,0 +1,84 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

2
settings.gradle 100644
View File

@ -0,0 +1,2 @@
rootProject.name = 'fourcal'

View File

@ -0,0 +1,40 @@
package cn.palmte.work;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import java.util.HashMap;
import java.util.Map;
/**
*
*/
@SpringBootApplication
public class FourCalApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(FourCalApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
/**
* wartomcatcatalina.shjvm-Dspring.profiles.active=test
* envprofile
* java -jar-Dspring.profiles.active=test
*/
setRegisterErrorPageFilter(false);
String env = System.getProperty("env");
if (null != env) {
Map<String, Object> map = new HashMap<>(1);
map.put("spring.profiles.active", env);
builder.properties(map);
//不能使用 builder.profiles(env);否则可能出现两个环境的都配置了
}
return builder.sources(FourCalApplication.class);
}
}

View File

@ -0,0 +1,41 @@
package cn.palmte.work.bean;
/**
*
* @author xiongshiyan
*/
public class Constant {
public static final String DATA = "Data";
public static final int ROLE_TYPE_SUPER_ADMIN = 0; // 系统管理员
public static final int ROLE_TYPE_CMCC_ADMIN = 1;// 移动管理员
public static final int ROLE_TYPE_ZJPT_ADMIN = 2; //资金平台管理员
private Constant(){}
/**
*
*/
public static final class Status {
private Status() {
}
/**
*
*/
public static final int STATUS_SUCCESS = 0;
/**
*
*/
public static final int STATUS_FAILED = 1;
/**
*
*/
public static final int STATUS_EXCEPTION = 2;
/**
*
*/
public static final int STATUS_PROMPT_LOGIN = 1009;
}
}

View File

@ -0,0 +1,11 @@
package cn.palmte.work.bean;
public interface RegexConstant {
/**
*
*/
String REGEX = "^1[0-9][0-9]\\d{8}$";
String SERVERADDRESS = "^(http|https|ftp)\\://(((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])|([a-zA-Z0-9_\\-\\.])+\\.(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum|uk|me))((:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\\-\\._\\?\\,\\'/\\\\\\+&amp;%\\$#\\=~])*)$";
}

View File

@ -0,0 +1,88 @@
package cn.palmte.work.bean;
import cn.palmte.work.config.Constant;
public class ResponseMsg {
private int status;
private String msg;
private Object data;
public ResponseMsg() {
}
public ResponseMsg(int status, String msg) {
this.status = status;
this.msg = msg;
}
public static ResponseMsg buildSuccessMsg(String msg) {
return new ResponseMsg(Constant.Status.STATUS_SUCCESS, msg);
}
public static ResponseMsg buildSuccessData(Object data) {
return buildSuccessMsg("ok", data);
}
public static ResponseMsg buildSuccessMsg(String msg, Object data) {
ResponseMsg responseMsg = new ResponseMsg(Constant.Status.STATUS_SUCCESS, msg);
responseMsg.setData(data);
return responseMsg;
}
public static ResponseMsg buildMsg(int status, String msg, Object data) {
ResponseMsg responseMsg = new ResponseMsg(status, msg);
responseMsg.setData(data);
return responseMsg;
}
public static ResponseMsg buildFailedMsg(String msg) {
return new ResponseMsg(Constant.Status.STATUS_FAILED, msg);
}
public static ResponseMsg buildFailedMsg(String msg, Object data) {
ResponseMsg responseMsg = new ResponseMsg(Constant.Status.STATUS_FAILED, msg);
responseMsg.setData(data);
return responseMsg;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public boolean isSuccess() {
return Constant.Status.STATUS_SUCCESS == this.status;
}
@Override
public String toString() {
return "ResponseMsg{" +
"status=" + status +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}

View File

@ -0,0 +1,44 @@
package cn.palmte.work.config;
import org.springframework.stereotype.Component;
/**
*
*
* @author pengqiang
* @date 2018/6/26
*/
@Component
public class ConfigProperties {
/**
*
*/
//@Value("${upload.path}")
private String uploadPath = "/mnt/dzg/image";
/**
*
*/
//@Value("${upload.prefix}")
private String uploadPrefix = "/upload";
/**
* admin
* https://dzgtest.palmte.cn
*/
//@Value("${admin.domain}")
private String adminDomain = "";
public String getUploadPath() {
return uploadPath;
}
public String getUploadPrefix() {
return uploadPrefix;
}
public String getAdminDomain() {
return adminDomain;
}
}

View File

@ -0,0 +1,62 @@
package cn.palmte.work.config;
/**
*
* @author xiongshiyan
*/
public class Constant {
public static final String PAGINATION = "pagination";
public static final String PRIVATEKEY = "privatekey";
public static final String PUBLICKEY = "publickey";
public static final String HEADER_TOKEN = "token";
public static final String API_TOKEN_MANAGER = "apiTokenManager";
public static final String PC_TOKEN_MANAGER = "pcTokenManager";
public static final String API_ERROR_COUNT_MANAGER = "apiErrorCountManager";
public static final String PC_ERROR_COUNT_MANAGER = "pcErrorCountManager";
public static final String API_CAPTCHA_MANGER = "apiCaptchaManger";
public static final String PC_CAPTCHA_MANGER = "pcCaptchaManger";
public static final String PREFIX_API_V3 = "/api/v3";
public static final String PREFIX_API_PC = "/api/pc";
public static final String PREFIX_API_DRAG = "/api/drag";
private Constant() {
}
/**
*
*/
public static final class Status {
private Status() {
}
/**
*
*/
public static final int STATUS_SUCCESS = 0;
/**
*
*/
public static final int STATUS_FAILED = 1;
/**
*
*/
public static final int STATUS_EXCEPTION = 2;
/**
*
*/
public static final int STATUS_PROMPT_LOGIN = 1009;
public static final int STATUS_PROMPT_UNAUTH = 1010;
}
/**
*
*/
public static final int STATUS_SUCCESS = 0;
/**
*
*/
public static final int STATUS_FAILED = 1;
}

View File

@ -0,0 +1,61 @@
package cn.palmte.work.config;
import cn.palmte.work.config.interceptor.TokenLoggingInterceptor;
import cn.palmte.work.utils.StrKit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
*
* @author xiongshiyan
*/
@Component
public class GoodWebAppConfigurer extends WebMvcConfigurerAdapter {
@Autowired
private TokenLoggingInterceptor tokenLoggingInterceptor;
/**
* url
*/
@Value("${fourcal.excluded.client.urls}")
private String excludesClientUrls;
@Value("${fourcal.excluded.pc.urls}")
private String excludesPCUrls;
@Override
public void addInterceptors(InterceptorRegistry registry) {
/**拦截任意URL,打印token header参数*/
addInterceptor(registry , tokenLoggingInterceptor , "" , "/**");
/**拦截所有排除指定的*/
}
private void addInterceptor(InterceptorRegistry registry , HandlerInterceptor handlerInterceptor , String excludeUrls , String... addPartterns) {
InterceptorRegistration registration = registry.addInterceptor(handlerInterceptor)
.addPathPatterns(addPartterns);
String[] p = excludeUrls.split(",");
StrKit.trim(p);
if( p.length > 0 ){
registration.excludePathPatterns(p);
}
}
/**
*
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedHeaders("*")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "DELETE", "PUT", "OPTIONS")
.allowCredentials(false).maxAge(3600);
}
}

View File

@ -0,0 +1,40 @@
package cn.palmte.work.config;
import cn.palmte.work.security.ReplaceSpecialCharFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import top.jfunc.http.SmartHttpClient;
import top.jfunc.http.smart.JdkSmartHttpClient;
import java.util.HashMap;
import java.util.Map;
/**
* @author xiongshiyan at 2020/9/30 , contact me with email yanshixiong@126.com or phone 15208384257
*/
@Configuration
public class HttpConfig {
@Bean
public SmartHttpClient smartHttpClient(){
return new JdkSmartHttpClient();
}
/**
* xss
*/
@Bean
public FilterRegistrationBean xssFilterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new ReplaceSpecialCharFilter());
filterRegistrationBean.setOrder(1);
filterRegistrationBean.setEnabled(true);
filterRegistrationBean.addUrlPatterns("/*");
Map<String, String> initParameters = new HashMap<>();
initParameters.put("includes", "/fourcal/admin/err");
filterRegistrationBean.setInitParameters(initParameters);
return filterRegistrationBean;
}
}

View File

@ -0,0 +1,33 @@
package cn.palmte.work.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import top.jfunc.common.db.utils.Pagination;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
/**
* @author xiongshiyan at 2018/7/23 , contact me with email yanshixiong@126.com or phone 15208384257
*/
@Configuration
public class PaginationConfig {
@PersistenceContext
@Autowired
private EntityManager entityManagerPrimary;
///错误的注入方式
/*@Primary
@Bean(Constant.PRIMARY_PAGINATION)
public Pagination primary(@Qualifier(Constant.ENTITY_MANAGER_PRIMARY_DB) EntityManager entityManager){
return new Pagination(entityManager);
}*/
@Primary
@Bean
public Pagination primaryPagination(){
return new Pagination(entityManagerPrimary);
}
}

View File

@ -0,0 +1,17 @@
package cn.palmte.work.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
@Configuration //1.主要用于标记配置类兼备Component的效果。
@EnableScheduling // 2.开启定时任务
public class StaticScheduleTask {
@Scheduled(cron = "0 0/5 * * * ?")
private void temp() throws Exception {
}
}

View File

@ -0,0 +1,32 @@
package cn.palmte.work.config;
import cn.palmte.work.service.map.MemorySimpleMap;
import cn.palmte.work.service.map.SimpleMap;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author xiongshiyan at 2018/8/14 , contact me with email yanshixiong@126.com or phone 15208384257
*/
@Configuration
public class SystemConfigWithMemory {
@Value("${fourcal.token.api.prefix}")
private String apiTokenPrefix;
@Value("#{${fourcal.token.api.expires}}")
private long apiExpires;
@Value("${fourcal.token.pc.prefix}")
private String pcTokenPrefix;
@Value("#{${fourcal.token.pc.expires}}")
private long pcExpires;
@Bean
public SimpleMap<String, String> simpleMap() {
return new MemorySimpleMap<>();
}
}

View File

@ -0,0 +1,78 @@
package cn.palmte.work.config;
/*import cn.palmte.work.model.Manager;
import cn.palmte.work.service.CaptchaCodeService;
import cn.palmte.work.service.token.redis.ApiTokenManager;
import cn.palmte.work.service.token.redis.RedisCaptchaManager;
import cn.palmte.work.service.token.redis.RedisErrorCountManager;
import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import top.jfunc.token.CaptchaManger;
import top.jfunc.token.ErrorCountManager;
import top.jfunc.token.TokenManager;
import static cn.palmte.work.config.SystemConfigWithMemory.API_TOKEN_MANAGER;*/
/*@Configuration
public class SystemConfigWithRedis {
@Autowired(required = false)
RedisConnectionFactory connectionFactory;
@Bean(name = "stringRedisTemplate")
public StringRedisTemplate stringRedisTemplate() {
return new StringRedisTemplate(connectionFactory);
}
@Bean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(){
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
//避免key出现乱码
template.setKeySerializer(new StringRedisSerializer());
//value使用FastJson转换
template.setValueSerializer(new GenericFastJsonRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new GenericFastJsonRedisSerializer());
return template;
}
@Value("${fourcal.token.api.prefix}")
private String apiTokenPrefix;
@Value("#{${fourcal.token.api.expires}}")
private long apiExpires;
@Bean(Constant.API_TOKEN_MANAGER)
public TokenManager<Manager> apiTokenManagerRedis(){
ApiTokenManager apiTokenManager = new ApiTokenManager();
apiTokenManager.setRedisTemplate(redisTemplate());
apiTokenManager.setApiExpires(apiExpires);
apiTokenManager.setMulti(true);
apiTokenManager.setTokenPrefix(apiTokenPrefix);
return apiTokenManager;
}
@Bean
public ErrorCountManager errorCountManager() {
RedisErrorCountManager redisErrorCountManager = new RedisErrorCountManager();
redisErrorCountManager.setThreshold(3);
redisErrorCountManager.setRedisTemplate(redisTemplate());
return redisErrorCountManager;
}
@Bean
public CaptchaManger captchaManger(@Autowired CaptchaCodeService captchaCodeService) {
RedisCaptchaManager captchaManger = new RedisCaptchaManager();
captchaManger.setRedisTemplate(redisTemplate());
captchaManger.setCaptchaCodeService(captchaCodeService);
return captchaManger;
}
}*/

View File

@ -0,0 +1,27 @@
package cn.palmte.work.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "upload")
public class UploadProperties {
private String path;
private String prefix;
public String getPath() {
return path;
}
public String getPrefix() {
return prefix;
}
public void setPath(String path) {
this.path = path;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
}

View File

@ -0,0 +1,97 @@
package cn.palmte.work.config.interceptor;
import cn.palmte.work.bean.ResponseMsg;
import cn.palmte.work.config.Constant;
import cn.palmte.work.config.log.LogExcluder;
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import top.jfunc.token.TokenManager;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import static cn.palmte.work.config.Constant.HEADER_TOKEN;
/**
* @author xiongshiyan
*/
public abstract class AbstractLoginInterceptor extends HandlerInterceptorAdapter {
private static final Logger logger = LoggerFactory.getLogger(AbstractLoginInterceptor.class);
protected void printNeccery(HttpServletRequest request, LogExcluder logExcluder) {
//拦截特殊字符
String[] specialStr = {"|", "&", ";", "$", "%", "@", "'", "\"", "\\'", "\\\"", "<", ">", "(", ")", "+", "CR", "LF", ",", "\\"};
for (String s : specialStr) {
if (request.getRequestURI().contains(s)) {
logger.info("uri:" + request.getRequestURI() + "含有特殊字符:" + s);
return;
}
}
if (logExcluder.needExcluded(request.getRequestURI())) {
return;
}
logger.info("uri:" + request.getRequestURI() + ",token:" + request.getHeader(HEADER_TOKEN));
}
protected boolean verifyLogin(HttpServletResponse response, TokenManager<?> tokenManager, String token, boolean cors) throws IOException {
/// Object o = tokenManager.findByToken(token);
boolean exist = tokenManager.existByToken(token);
if (!exist) {
promptLogin(response, cors);
return false;
} else {
tokenManager.updateExpires(token);
return true;
}
}
protected boolean verifyLogin(HttpServletResponse response, TokenManager<String> tokenManager, String token, boolean cors, String phone) throws IOException {
if (null == phone) {
promptLogin(response, cors);
return false;
} else {
tokenManager.updateExpires(token);
return true;
}
}
protected void promptLogin(HttpServletResponse response, boolean cors) throws IOException {
response.setContentType("application/json;charset=utf-8");
response.setCharacterEncoding("utf-8");
if (cors) {
cors(response);
}
response.getWriter().write(JSON.toJSONString(ResponseMsg.buildMsg(Constant.Status.STATUS_PROMPT_LOGIN, "login first please", "")));
}
protected void promptNoPermission(HttpServletResponse response, boolean cors) throws IOException {
response.setContentType("application/json;charset=utf-8");
response.setCharacterEncoding("utf-8");
if (cors) {
cors(response);
}
response.getWriter().write(JSON.toJSONString(ResponseMsg.buildMsg(Constant.Status.STATUS_PROMPT_UNAUTH, "you have no permission", "")));
}
protected void promptLogin(HttpServletResponse response) throws IOException {
promptLogin(response, false);
}
/**
*
*
* @param response HttpServletResponse
*/
private void cors(HttpServletResponse response) {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "*");
response.setHeader("Access-Control-Allow-Methods", "POST,GET,DELETE,PUT,OPTIONS");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
}
}

View File

@ -0,0 +1,27 @@
package cn.palmte.work.config.interceptor;
import cn.palmte.work.config.log.LogExcluder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* headertoken
* @author xiongshiyan
*/
@Component
public class TokenLoggingInterceptor extends AbstractLoginInterceptor {
@Autowired
private LogExcluder logExcluder;
/**
* Handler
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
printNeccery(request , logExcluder);
return true;
}
}

View File

@ -0,0 +1,53 @@
package cn.palmte.work.config.log;
import cn.palmte.work.utils.StrKit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Arrays;
/**
*
* @author xiongshiyan at 2018/12/23 , contact me with email yanshixiong@126.com or phone 15208384257
*/
@Component
public class LogExcluder implements InitializingBean{
private static final Logger logger = LoggerFactory.getLogger(LogExcluder.class);
@Value("${server.context-path:/fourcal}")
private String contextPath;
@Value("${fourcal.log.excluded.urls:}")
private String[] logExcludedUrls;
@Override
public void afterPropertiesSet() throws Exception {
if(isEmpty(logExcludedUrls)){
return;
}
StrKit.trim(logExcludedUrls);
logger.info(Arrays.asList(logExcludedUrls).toString());
}
public boolean needExcluded(String uri){
//没有需要排除的
if(isEmpty(logExcludedUrls)){
return false;
}
//去除前端轮询的
if(uri.contains("api/pc/alarm/fetchAlarm")){
return true;
}
//去掉前缀
uri = uri.replace(contextPath , "");
return StrKit.targetInArray(logExcludedUrls , uri);
}
private <T> boolean isEmpty(T[] array){
return null == array || 0 == array.length;
}
}

View File

@ -0,0 +1,53 @@
package cn.palmte.work.config.log;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
/**
* @author xiongshiyan
*
*/
@Aspect
@Component
@Order(1)
public class WebLogAspect {
private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
@Autowired
private LogExcluder logExcluder;
@Pointcut("execution(public * cn.palmte.work.controller..*.*(..))")
public void webLog(){}
@Around(value = "webLog()")
public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
if(logExcluder.needExcluded(request.getRequestURI())){
return proceedingJoinPoint.proceed();
}
logger.info("REQUEST : " + request.getRequestURI() + " : "
+(proceedingJoinPoint.getSignature().getDeclaringTypeName() + "." + proceedingJoinPoint.getSignature().getName() + " : ")
+ Arrays.toString(proceedingJoinPoint.getArgs()));
Object proceed = proceedingJoinPoint.proceed();
logger.info("RESPONSE : " + proceed);
return proceed;
}
}

View File

@ -0,0 +1,210 @@
package cn.palmte.work.controller.backend;
import cn.palmte.work.bean.ResponseMsg;
import cn.palmte.work.config.Constant;
import cn.palmte.work.model.Admin;
import cn.palmte.work.pojo.ModifyPasswordRequest;
import cn.palmte.work.service.AccountService;
import cn.palmte.work.service.AdminService;
import cn.palmte.work.service.SysRoleService;
import cn.palmte.work.utils.InterfaceUtil;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import top.jfunc.common.crypto.symmetric.DESAS;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Controller
@RequestMapping("/account")
public class AccountController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(AccountController.class);
@Autowired
private AccountService accountService;
@Autowired
private AdminService adminService;
@Autowired
private SysRoleService sysRoleService;
@RequestMapping(value = "/updatePassword")
@ResponseBody
public ResponseMsg updatePassword(HttpServletRequest request, ModifyPasswordRequest modifyPasswordRequest){
ResponseMsg responseMsg = new ResponseMsg();
try{
String privateKey = (String) request.getSession().getAttribute(Constant.PRIVATEKEY);
adminService.updatePassword(modifyPasswordRequest.getId(), modifyPasswordRequest.getPassword(),
modifyPasswordRequest.getNewPassword(), privateKey);
responseMsg.setStatus(0);
responseMsg.setMsg("密码修改成功");
}
catch(Exception e){
responseMsg.setStatus(1);
responseMsg.setMsg("密码修改失败:"+e.getMessage());
}
return responseMsg;
}
@RequestMapping("/list")
public String list(@RequestParam(value = KEYWORDS, required = false) String keywords,
@RequestParam(value = PAGE_NUMBER, defaultValue = DEFAULT_PAGE_NUMBER) int pageNumber,
@RequestParam(value = PAGE_SIZE, defaultValue = DEFAULT_PAGE_SIZE) int pageSize,
Map<String, Object> model) {
// 初始化参数
setModel(keywords, model);
ConcurrentHashMap<String, String> searchInfo = getSearchInfo(keywords, model);
model.put("roleList", sysRoleService.getAllEnableSysRole());
model.put("pager", accountService.getAdminList(searchInfo, pageSize, pageNumber));
return "/admin/account_list";
}
/**
*
*/
@RequestMapping("/save")
public String save(@RequestParam("userId") int userId,Admin admin, HttpServletRequest request, Map<String, Object> model) throws IOException {
if(admin.getRoleId()<=0){
model.put("errorMessage","角色不能为空!");
return "/common/error";
}
//获取验证用户信息
String message = accountService.validateUserExistInfo(userId,admin);
if(StringUtils.isNotEmpty(message)){
model.put("errorMessage",message);
return "/common/error";
}
try {
HttpSession session = request.getSession();
String privateKey = (String) session.getAttribute(Constant.PRIVATEKEY);
accountService.saveOrUpdateAccount(userId,admin.getRoleId(),admin, privateKey);
} catch (Exception e) {
logger.error("保存账号出错!" + e.toString());
return "新增账号出错!请联系管理员处理!";
}
return "redirect:/account/list";
}
/**
*
*/
@RequestMapping("/add")
public String add(HttpServletRequest request, Map<String, Object> model) {
genRSAKeyPair(request, model);
model.put("userId", -1);
model.put("account", new Admin());
//获取所有角色
model.put("roleList", sysRoleService.getAllEnableSysRole());
return "/admin/account_input";
}
/**
*
*/
@RequestMapping("/changeStatus")
public ResponseMsg changeStatus(Admin admin) {
boolean locked = accountService.changeStatus(admin.getId(),admin.getEnabled());
if (locked) {
return ResponseMsg.buildSuccessMsg("操作成功");
} else {
return ResponseMsg.buildFailedMsg("操作失败");
}
}
/**
* ID
*/
@RequestMapping("/edit")
public String edit(@RequestParam("userId") int userId, Map<String, Object> model) {
model.put("userId", userId);
Admin admin = accountService.findUserById(userId);
model.put("roleId", String.valueOf(admin.getRoleId()));
model.put("roleType", admin.getRoleType());
model.put("roleLevel", admin.getRoleLevel());
model.put("realName", admin.getRealName());
model.put("userName", admin.getUserName());
model.put("telephone", admin.getTelephone());
model.put("regionId", admin.getRegionId());
model.put("account", admin);
//获取所有角色
model.put("roleList", sysRoleService.getAllEnableSysRole());
return "/admin/account_input";
}
/**
*
*/
@RequestMapping("/delete")
@ResponseBody
public ResponseMsg delete(@RequestParam("userId") int userId) {
ResponseMsg responseMsg = new ResponseMsg();
boolean deleted = accountService.deleteAccount(userId);
if (deleted) {
responseMsg.setStatus(0);
responseMsg.setMsg("删除成功");
} else {
responseMsg.setStatus(1);
responseMsg.setMsg("删除失败");
}
return responseMsg;
}
/**
* ID
*/
@RequestMapping("/resetPassword")
@ResponseBody
public ResponseMsg resetPassword(@RequestParam("userId") int userId,HttpServletRequest request) {
HttpSession session = request.getSession();
String privateKey = (String) session.getAttribute(Constant.PRIVATEKEY);
boolean flag = accountService.resetPassword(userId,privateKey);
ResponseMsg responseMsg = new ResponseMsg();
if (flag) {
responseMsg.setStatus(0);
responseMsg.setMsg("重置密码成功");
} else {
responseMsg.setStatus(1);
responseMsg.setMsg("重置密码失败");
}
return responseMsg;
}
/**
*
*/
@RequestMapping("/password")
public String password(HttpServletRequest request,Map<String, Object> model){
Admin admin = adminService.getAdminById(InterfaceUtil.getAdminId());
try {
String id = new DESAS().encrypt(admin.getId().toString());
model.put("userId", id);
} catch (Exception e) {
e.printStackTrace();
}
model.put("SysUser", admin);
genRSAKeyPair(request,model);
return "/admin/account_password";
}
private void setModel(@RequestParam(value = "keywords", required = false) String keywords, Map<String, Object> model) {
model.put("roleType", "-1");
model.put("keywords", keywords);
}
}

View File

@ -0,0 +1,259 @@
package cn.palmte.work.controller.backend;
import cn.palmte.work.config.Constant;
import cn.palmte.work.model.Admin;
import cn.palmte.work.model.LoginLog;
import cn.palmte.work.model.SysRole;
import cn.palmte.work.model.SysRoleRepository;
import cn.palmte.work.pojo.LoginRequest;
import cn.palmte.work.pojo.LoginResponse;
import cn.palmte.work.service.AdminService;
import cn.palmte.work.service.LoginLogService;
import cn.palmte.work.utils.*;
import net.logstash.logback.encoder.org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.util.Date;
import java.util.Map;
@Controller
@RequestMapping("/admin")
public class AdminController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(AdminController.class);
@Autowired
private AdminService adminService;
@Autowired
private LoginLogService loginLogService;
@Autowired
private SysRoleRepository sysRoleRepository;
@PostMapping(value = "/singIn")
public String singIn(RedirectAttributes attr, LoginRequest loginRequest, HttpServletRequest request) throws Exception {
String userName = loginRequest.getUserName();
String password = loginRequest.getPassword();
String message;
try {
try {
String privateKey = request.getSession().getAttribute(Constant.PRIVATEKEY).toString();
userName = new String(RSAUtils.decryptByPrivateKey(Base64Utils.decode(userName), privateKey));
password = new String(RSAUtils.decryptByPrivateKey(Base64Utils.decode(password), privateKey));
} catch (Exception e) {
logger.error("解密出错", e);
attr.addAttribute("errorMessages", "用户名密码错误");
return "redirect:/admin/err";
}
attr.addAttribute("userName", userName);
if (StringUtils.isEmpty(userName) || StringUtils.isEmpty(password)) {
message = "用户名或密码错误!";
attr.addAttribute("errorMessages", message);
return "redirect:/admin/err";
}
Admin admin = adminService.getAdminByUsername(userName);
if (null == admin) {
message = "用户名或密码错误~~~";
attr.addAttribute("errorMessages", message);
loginLogService.saveLog(userName, LoginLog.FAILED, message);
return "redirect:/admin/err";
}
if (admin.getEnabled() == 0) {
message = "该用户已禁用~~~";
attr.addAttribute("errorMessages", message);
loginLogService.saveLog(userName, LoginLog.FAILED, message);
return "redirect:/admin/err";
}
if (adminService.isLocked(admin)) {
message = "该用户已被锁定~~~";
attr.addAttribute("errorMessages", message);
loginLogService.saveLog(userName, LoginLog.FAILED, message);
return "redirect:/admin/err";
}
int roleId = admin.getRoleId();
SysRole role = sysRoleRepository.findOne(roleId);
if (role.getIsEnable() == 0) {
message = "该用户绑定的角色已禁用~~~";
attr.addAttribute("errorMessages", message);
loginLogService.saveLog(userName, LoginLog.FAILED, message);
return "redirect:/admin/err";
}
String salt = admin.getSalt();
request.getSession().setAttribute("realsName", admin.getRealName());
//request.getSession().setAttribute("telephone", admin.getTelephone());
request.getSession().setAttribute("lastLoginTime", admin.getLoginDate());
String newPassword;
try {
newPassword = DESCrypto.encryptPassword(password, salt);
} catch (Exception e) {
logger.error("加密出错", e);
message = "密码出错";
attr.addAttribute("errorMessages", message);
loginLogService.saveLog(userName, LoginLog.FAILED, message);
return "redirect:/admin/err";
}
boolean bool = checkUpdatePasswordTime(admin);
if (bool) {
request.getSession().setAttribute("message", "您已超过90天未修改密码");
} else {
request.getSession().setAttribute("message", "");
}
message = login(userName, newPassword, false, false);
if (!message.isEmpty()) {
attr.addAttribute("errorMessages", message);
//增加登录失败次数
adminService.addLoginError(admin);
loginLogService.saveLog(userName, LoginLog.FAILED, message);
return "redirect:/admin/err";
}
adminService.updateLoginInfo(admin, request);
loginLogService.saveLog(userName, LoginLog.SUCCESS, "登录成功");
/**
* admin,job,[1]
*/
return "redirect:/admin/center?uid=0";
} catch (Exception e) {
message = "登录发生未知错误e=" + e.getMessage();
attr.addAttribute("errorMessages", message);
loginLogService.saveLog(userName, LoginLog.FAILED, message);
return "redirect:/admin/err";
} catch (Throwable t) {
message = "登录发生未知错误t=" + t.getMessage();
attr.addAttribute("errorMessages", message);
loginLogService.saveLog(userName, LoginLog.FAILED, message);
return "redirect:/admin/err";
}
}
/**
*
* @param admin
* @return
* @throws ParseException
*/
public boolean checkUpdatePasswordTime(Admin admin) throws ParseException {
if (null != admin.getUpdatedPasswordTime()) {
int days = DateKit.daysBetween(admin.getUpdatedPasswordTime(), new Date());
if (days >= 90) {
return true;
}
}
return false;
}
/**
*
*
* @param returnJson json
*/
public String login(String username, String password, boolean rememberMe, boolean returnJson) {
//TODO:登录验证逻辑(待补充)
String errorMessage = "";
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
token.setRememberMe(rememberMe);
try {
subject.login(token);
} catch (UnknownAccountException | LockedAccountException ue) {
token.clear();
errorMessage = ue.getMessage();
} catch (IncorrectCredentialsException ie) {
token.clear();
errorMessage = "用户名或密码错误~~~";
} catch (RuntimeException re) {
re.printStackTrace();
token.clear();
errorMessage = "登录失败!";
}
return errorMessage;
}
@RequestMapping(value = "/login", method = {RequestMethod.GET})
public String login(HttpServletRequest request) throws Exception {
//TODO:登录页面初始化代码
InterfaceUtil.genRSAKeyPair(request);
return "/admin/admin_login";
}
@RequestMapping(value = "/center", method = RequestMethod.GET)
public String center(@ModelAttribute("userName") String userName, @RequestParam("uid") int uid,
@RequestParam(value = "showJobMonitorError", defaultValue = "0") int showJobMonitorError, Map<String, Object> model) {
logger.info("------------------------------------------重定向到首页信息查询center方法内部-----------------------用户名====" + userName);
LoginResponse loginResponse = adminService.initMenuList(uid);
model.put("userName", userName);
model.put("loginResponse", loginResponse);
if (uid == 0) {
uid = (loginResponse.getTopMenuList() != null && loginResponse.getTopMenuList().size() > 0) ? loginResponse.getTopMenuList().get(0).getId() : 0;
}
model.put("uid", uid);
model.put("showJobMonitorError", showJobMonitorError);
logger.info("------------------------------------------跳转到admin_index-----------------------");
return "/admin/admin_index";
}
@RequestMapping(value = "/topMenu", method = RequestMethod.GET)
public String topMenu(@RequestParam("uid") int uid, Map<String, Object> model) {
LoginResponse loginResponse = adminService.initMenuList(uid);
model.put("loginResponse", loginResponse);
return "/admin/admin_index";
}
@RequestMapping(value = "/console", method = RequestMethod.GET)
public String console(@RequestParam("uid") int uid, Map<String, Object> model, HttpServletRequest request) {
logger.info(uid + "");
model.put("statistic", "");
return "/admin/console";
}
@RequestMapping(value = "/err", method = RequestMethod.GET)
public String loginErr(HttpServletRequest request, @ModelAttribute("errorMessages") String errorMessages) {
InterfaceUtil.genRSAKeyPair(request);
request.setAttribute("base", request.getContextPath());
return "/admin/admin_login";
}
// 管理员退出
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpServletRequest request) {
// ShiroPrincipal principal = (ShiroPrincipal) SecurityUtils.getSubject().getPrincipal();
// // 如果已经登录,则跳转到管理首页
// if(principal != null){
// SecurityUtils.getSubject().logout();
// }
return "redirect:/admin/login";
}
/**
*
*/
@RequestMapping(value = "/captcha", method = RequestMethod.GET)
public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
new CaptchaUtils().getRandCode(request, response);
}
}

View File

@ -0,0 +1,157 @@
package cn.palmte.work.controller.backend;
import cn.palmte.work.config.Constant;
import cn.palmte.work.model.Admin;
import cn.palmte.work.utils.InterfaceUtil;
import cn.palmte.work.utils.RSAUtils;
import cn.palmte.work.utils.Utils;
import com.alibaba.fastjson.JSON;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class BaseController {
public static final String KEYWORDS = "keywords";
public static final String PAGE_NUMBER = "pageNumber";
public static final String PAGE_SIZE = "pageSize";
public static final String PAGER = "pager";
public static final String DEFAULT_PAGE_NUMBER = "1";
public static final String DEFAULT_PAGE_SIZE = "10";
/**
* Gets the request.
*
* @return the request
*/
protected HttpServletRequest getRequest() {
return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
}
/**
* Gets the response.
*
* @return the response
*/
protected HttpServletResponse getResponse() {
return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getResponse();
}
/**
* Gets the session
*
* @return the session
*/
protected HttpSession getSession() {
return getRequest().getSession();
}
/**
* http header
*
* @param response HttpServletResponse
* @param fileName
*/
protected void downloadHearder(HttpServletResponse response, String fileName, String contentType) {
response.setContentType(contentType);
response.setCharacterEncoding("UTF-8");
try {
response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''" + java.net.URLEncoder.encode(fileName, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
/**
* @see BaseController {@link #downloadHearder(HttpServletResponse, String, String)}
*/
protected void downloadHearder(HttpServletResponse response, String fileName) {
downloadHearder(response, fileName, "application/octet-stream");
}
public ConcurrentHashMap<String, String> getSearchInfo(String keywords, Map<String, Object> model) {
ConcurrentHashMap<String, String> searchMap = Utils.parseMap(keywords);
setModers(searchMap, model);
return searchMap;
}
/**
* model
*/
public void setModers(ConcurrentHashMap<String, String> searchInfo, Map<String, Object> model) {
for (Map.Entry<String, String> item : searchInfo.entrySet()) {
model.put(item.getKey(), item.getValue());
}
}
/**
* request
*/
public void setAttrs(Map<String, String> searchInfo) {
HttpServletRequest request = getRequest();
for (Map.Entry<String, String> item : searchInfo.entrySet()) {
request.setAttribute(item.getKey(), item.getValue());
}
keepKeywords(searchInfo);
}
public Map<String, String> getSearchInfo(String keywords) {
Map<String, String> searchMap = Utils.parseMap(keywords);
setAttrs(searchMap);
return searchMap;
}
/**
* keywords
*/
protected void keepKeywords(Map<String, String> map) {
HttpServletRequest request = getRequest();
request.setAttribute(KEYWORDS, JSON.toJSONString(map));
}
public void genRSAKeyPair(HttpServletRequest request, Map<String, Object> model) {
/* 生成KeyPair */
Map<String, Object> keyMap;
try {
keyMap = RSAUtils.genKeyPair();
String publicKey = RSAUtils.getPublicKey(keyMap);
String privateKey = RSAUtils.getPrivateKey(keyMap);
/* 保存私钥到session */
request.getSession().setAttribute(Constant.PRIVATEKEY, privateKey);
/* 公钥给前端页面 */
model.put(Constant.PUBLICKEY, publicKey);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*/
public Admin getAdmin() {
return InterfaceUtil.getAdmin();
}
/**
* Id
*/
public int getAdminId() {
return InterfaceUtil.getAdmin().getId();
}
}

View File

@ -0,0 +1,49 @@
package cn.palmte.work.controller.backend;
import cn.palmte.work.bean.ResponseMsg;
import cn.palmte.work.config.Constant;
import cn.palmte.work.config.UploadProperties;
import cn.palmte.work.pojo.UploadResult;
import cn.palmte.work.utils.UploadUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
/**
* @author pengqiang
* @date 2018/4/21
*/
@Controller
@RequestMapping("/file")
public class FileController extends BaseController {
@Autowired
private UploadProperties uploadProperties;
/**
*
* @return
*/
@PostMapping("/upload")
@ResponseBody
public ResponseMsg upload(@RequestParam(value = "files[]") MultipartFile[] multipartfiles) {
ResponseMsg responseMsg = ResponseMsg.buildFailedMsg("failed");
if (null != multipartfiles && multipartfiles.length > 0) {
MultipartFile file = multipartfiles[0];
UploadResult result = UploadUtil.upload(file,
uploadProperties.getPath() , uploadProperties.getPrefix());
if (Constant.STATUS_SUCCESS == result.getStatus()) {
responseMsg = ResponseMsg.buildSuccessMsg("成功", result);
} else {
responseMsg.setMsg(result.getMsg());
}
}
return responseMsg;
}
}

View File

@ -0,0 +1,15 @@
package cn.palmte.work.controller.backend;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/")
public class IndexController extends BaseController{
@GetMapping(value = "/")
public String index() throws Exception {
return "redirect:/admin/login";
}
}

View File

@ -0,0 +1,140 @@
package cn.palmte.work.controller.backend;
import cn.palmte.work.bean.ResponseMsg;
import cn.palmte.work.model.SysPermission;
import cn.palmte.work.model.SysPermissionRepository;
import cn.palmte.work.service.SysPermissionService;
import cn.palmte.work.service.SysRolePermissionService;
import cn.palmte.work.utils.DateKit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
*
*@author nsp
*
*/
@Controller
@RequestMapping("/permission")
public class SysPermissionController extends BaseController{
@Autowired
private SysPermissionService sysPermissionService;
@Autowired
private SysPermissionRepository sysPermissionRepository;
@Autowired
private SysRolePermissionService sysRolePermissionService;
private static final Logger logger = LoggerFactory.getLogger(SysPermissionController.class);
@RequestMapping("/list")
public String list(@RequestParam(value = "keywords",required = false) String keywords,
@RequestParam(value = "pageNumber",defaultValue = "1") String pageNumber,
@RequestParam(value = "sql", required = false) String sql,
Map<String, Object> model){
// 初始化参数
setModel(keywords, model);
ConcurrentHashMap<String, String> searchInfo = getSearchInfo(keywords,model);
model.put("pager",sysPermissionService.getAllPermissionListByPage(searchInfo,pageNumber));
model.put("sql", sql);
return "/admin/sys_permission_list";
}
private void setModel(String keywords, Map<String, Object> model){
model.put("pmsLevel","0");
model.put("pmsType","0");
model.put("pmsDeleted","-1");
model.put("permissionID","-1");
model.put("keywords",keywords);
}
@GetMapping(value = "/add")
public String add( Map<String, Object> model){
SysPermission permission=new SysPermission();
model.put("permissionID","-1");
model.put("permission",permission);
model.put("ps", sysPermissionRepository.findPermissions());
return "/admin/sys_permission_input";
}
@PostMapping(value = "/save")
public String save(@RequestParam("permissionID") String permissionID,
SysPermission sysPermission, RedirectAttributes attr) throws IOException{
final SysPermission parent = sysPermissionRepository.findOne(sysPermission.getParentId());
sysPermission.setLevel(parent.getLevel()+1);
int type = (parent.getLevel()==4) ? 2 : 1;
sysPermission.setType(type);
if ("-1".equals(permissionID)){
getSql(sysPermission, attr, parent);
sysPermissionService.addPermission(sysPermission); //新增
}else {
sysPermissionService.updatePermission(sysPermission,permissionID); // 修改
}
return "redirect:/permission/list";
}
private void getSql(SysPermission sysPermission, RedirectAttributes attr, SysPermission parent) {
String sql1 = "INSERT INTO `sys_permission` (`name`, `icon`, `url`, `permission`, `parent_id`, `level`, `type`, `sort`, `remark`, `is_deleted`, `created_by`, `created_time`, `last_updated_by`, `last_updated_time`) VALUES ('{name}', '', '{url}', '{permission}', (SELECT id FROM sys_permission sp WHERE sp.permission = '{parentPermission}'), '{level}', '{type}', '{sort}', '', b'0', '1', '{time}', '1', '{time}');"
.replace("{name}", sysPermission.getName())
.replace("{url}", sysPermission.getUrl())
.replace("{permission}", sysPermission.getPermission())
.replace("{parentPermission}", parent.getPermission())
.replace("{level}", sysPermission.getLevel()+"")
.replace("{type}", sysPermission.getType()+"")
.replace("{sort}", sysPermission.getSort()+"")
.replace("{time}", DateKit.toStr(new Date(), DateKit.TIME_FORMAT));
String sql2 = "INSERT INTO `sys_role_permission` (`role_id`, `permission_id`, `is_deleted`, `created_by`, `created_time`, `last_updated_by`, `last_updated_time`) VALUES ('1', (SELECT id FROM sys_permission WHERE permission = '{permission}'), b'0', '1', '{time}', '1', '{time}');"
.replace("{permission}", sysPermission.getPermission())
.replace("{time}", DateKit.toStr(new Date(), DateKit.TIME_FORMAT));
attr.addAttribute("sql", sql1 + "</br>" + sql2);
}
@GetMapping(value = "/edit")
public String edit(@RequestParam("id") String permissionID,Map<String, Object> model){
SysPermission permission =sysPermissionRepository.findOne(Integer.parseInt(permissionID));
model.put("permissionID",permissionID);
model.put("permission",permission);
model.put("ps", sysPermissionRepository.findPermissions());
return "/admin/sys_permission_input";
}
@GetMapping(value = "/delete")
@ResponseBody
public ResponseMsg delete(@RequestParam("ids") String ids){
String[] deleteIds=ids.split("#%#");
boolean deleted = sysPermissionService.deletePermissionByIDs(deleteIds);
boolean bDel = sysRolePermissionService.deleteSysRolePermissionByIDs(deleteIds);
ResponseMsg responseMsge=new ResponseMsg();
if(deleted && bDel){
logger.info("删除成功");
responseMsge.setStatus(0);
responseMsge.setMsg("删除成功");
} else{
responseMsge.setStatus(1);
responseMsge.setMsg("删除失败");
}
return responseMsge;
}
}

View File

@ -0,0 +1,262 @@
package cn.palmte.work.controller.backend;
import cn.palmte.work.bean.Constant;
import cn.palmte.work.bean.ResponseMsg;
import cn.palmte.work.model.SysRole;
import cn.palmte.work.pojo.PermissionNode;
import cn.palmte.work.pojo.RoleBean;
import cn.palmte.work.service.AdminService;
import cn.palmte.work.service.SysRoleService;
import cn.palmte.work.utils.InterfaceUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
*
* @author nsp
*/
@Controller
@RequestMapping("/role")
public class SysRoleController extends BaseController{
@Autowired
private SysRoleService sysRoleService;
@Autowired
private AdminService adminService;
private static final Logger logger = LoggerFactory.getLogger(SysRoleController.class);
private static final int[] ROLE_TYPE_ARRAY = new int[] { Constant.ROLE_TYPE_CMCC_ADMIN,Constant.ROLE_TYPE_ZJPT_ADMIN};
@RequestMapping("/list")
public String list(@RequestParam(value = "keywords",required = false) String keywords,
@RequestParam(value = PAGE_NUMBER, defaultValue = DEFAULT_PAGE_NUMBER) int pageNumber,
@RequestParam(value = PAGE_SIZE, defaultValue = DEFAULT_PAGE_SIZE) int pageSize,
Map<String, Object> model) {
logger.info("获取角色列表");
//当前登录人的角色类型
model.put("keywords",keywords);
SysRole adminSysRole=adminService.getRole(InterfaceUtil.getAdminId()+"");
ConcurrentHashMap<String, String> searchInfo = getSearchInfo(keywords,model);
model.put("pager",sysRoleService.list(searchInfo,pageNumber,pageSize));
return "admin/role_list";
}
@GetMapping(value = "/add")
public String add( Map<String, Object> model){
//当前登录人的角色
SysRole adminSysRole=adminService.getRole(InterfaceUtil.getAdminId()+"");
PermissionNode root= sysRoleService.getPermissionNodeTree(adminSysRole.getId());
List<RoleBean> roleLevels = getRoleLevels(adminSysRole.getId(), 0);
List<RoleBean> roleTypes = getRoleTypes(adminSysRole.getId(), adminSysRole.getType(),0);
SysRole role = new SysRole();
model.put("permnode",root);
model.put("roleID",-1);
model.put("isActive",1);
model.put("level",roleLevels);//默认 省级
model.put("type",roleTypes);//角色类型
model.put("role",role);
model.put("selectedType",roleLevels.get(0).getValue());
return "/admin/role_input";
}
@RequestMapping("/edit")
public String edit(@RequestParam(value = "id")int id, Map<String, Object> model){
//当前登录人的角色
SysRole adminSysRole=adminService.getRole(InterfaceUtil.getAdminId()+"");
SysRole role = sysRoleService.fingSysRoleById(id);
PermissionNode root = sysRoleService.getPermissionNodeTreeForEdit(adminSysRole.getId(), id);
List<RoleBean> roleLevels = getRoleLevels(adminSysRole.getId(), role.getLevel());
List<RoleBean> roleTypes = getRoleTypes(adminSysRole.getId(),adminSysRole.getType(), role.getType());
model.put("permnode",root);
model.put("roleID",id);
model.put("roleName",role.getName());
model.put("level",roleLevels);
model.put("type",roleTypes);
model.put("selectedType",role.getType());
model.put("role",role);
return "admin/role_input";
}
@RequestMapping("/save")
public String save(@RequestParam Map<String, Object> reqMap,@RequestParam(value = "roleID")int roleID
) {
logger.info("新增编辑保存,roleID="+roleID);
sysRoleService.addOrUpdatePermission(reqMap,roleID);
return "redirect:/role/list";
}
@RequestMapping("/check")
@ResponseBody
public ResponseMsg check(@RequestParam(value = "role_id")String role_id, @RequestParam(value = "role_name")String role_name,
HttpServletResponse response) throws Exception{
int result=sysRoleService.cheakRoleName(Integer.parseInt(role_id),role_name);
ResponseMsg responseMsg=new ResponseMsg();
if (result>0){
responseMsg.setStatus(0);
responseMsg.setMsg("该角色名已存在,请重新输入!");
}else {
responseMsg.setStatus(1);
responseMsg.setMsg("");
}
return responseMsg;
}
@GetMapping(value = "/delete")
@ResponseBody
public ResponseMsg delete(@RequestParam("ids") String ids){
ResponseMsg responseMsge=new ResponseMsg();
if ("".equals(ids)){
responseMsge.setStatus(1);
responseMsge.setMsg("删除失败,无选中项!");
}else {
String[] deleteIds=ids.split("#%#");
String msg = sysRoleService.deleteSelectedPermission(deleteIds);
responseMsge.setStatus(0);
responseMsge.setMsg(msg);
}
return responseMsge;
}
/**
* @Title:
* @Description:(1>2>3>4),
* @param adminRoleId
* ID
* @param selectedLevel
*
* @return List<PermissionLevel>
*/
private List<RoleBean> getRoleLevels(int adminRoleId, int selectedLevel){
SysRole role = sysRoleService.fingSysRoleById(adminRoleId);
int adminLevel = role.getLevel();
if(selectedLevel == 0){
selectedLevel = adminLevel;
}
List<RoleBean> roleLevels = new ArrayList<RoleBean>(3);
for(int i = adminLevel; i <= 3; i++){
String name = getRoleLevelName(i);
if(null != name){
RoleBean permissionLevel = new RoleBean(name, i);
if(selectedLevel == i){
permissionLevel.setSelected(true);
}
roleLevels.add(permissionLevel);
}
}
return roleLevels;
}
/**
*
* @param adminRoleId
* @param selectedType
* @return
*/
private List<RoleBean> getRoleTypes(int adminRoleId,int adminRoleType, int selectedType){
SysRole role = sysRoleService.fingSysRoleById(adminRoleId);
int roleType = role.getType();
if(selectedType == 0){
selectedType = roleType;
}
List<RoleBean> roleLevels = new ArrayList<RoleBean>(4);
for(int i = 0; i < ROLE_TYPE_ARRAY.length; i++){
if (adminRoleType<ROLE_TYPE_ARRAY[i]){
String name = getRoleTypeName(ROLE_TYPE_ARRAY[i]);
if(null != name){
RoleBean roleTypeBean = new RoleBean(name, ROLE_TYPE_ARRAY[i]);
if(selectedType == ROLE_TYPE_ARRAY[i]){
roleTypeBean.setSelected(true);
}
roleLevels.add(roleTypeBean);
}
}
}
return roleLevels;
}
/**
*
* type
* @param type
* @return
*/
private String getRoleTypeName(int type){
String typeName = null;
switch(type){
case Constant.ROLE_TYPE_CMCC_ADMIN:
typeName = "移动管理员";
break;
case Constant.ROLE_TYPE_ZJPT_ADMIN:
typeName = "资金平台管理员";
break;
default:typeName = null;
}
return typeName;
}
/**
* Level
* @param level
* @return
*/
private String getRoleLevelName(int level){
String levelName = null;
switch(level){
case 1:
levelName = "省级";
break;
/*case 2:
levelName = "地市级";
break;
case 3:
levelName = "区县级";
break;
case 4:
levelName = "网点级";
break;*/
default:levelName = null;
}
return levelName;
}
/**
*
*/
@RequestMapping("/enableOrDisable")
@ResponseBody
public ResponseMsg enableOrDisable(@RequestParam("id") int id,
@RequestParam("enabled") int status, RedirectAttributes attr) {
boolean isSuccess = false;
try {
isSuccess = sysRoleService.enableOrDisable(status, id);
} catch (Exception e) {
e.getMessage();
}
if (isSuccess) {
return ResponseMsg.buildSuccessMsg("操作成功");
} else {
return ResponseMsg.buildSuccessMsg("操作失败");
}
}
}

View File

@ -0,0 +1,35 @@
package cn.palmte.work.exception;
import cn.palmte.work.config.Constant;
/**
* @author xiongshiyan
* 使ResponseException(ResultCode,Message,Data)
*/
public class ResponseException extends RuntimeException{
private int status = Constant.Status.STATUS_FAILED;
private Object data = null;
public ResponseException(int resultCode, String message, Object data){
super(message);
this.status = resultCode;
this.data = data;
}
public ResponseException(int status, String message){
this(status, message, null);
}
public ResponseException(String message){
super(message);
}
public int getStatus(){
return status;
}
public void setStatus(int status){ this.status = status; }
public Object getData(){
return data;
}
public void setData(Object data){
this.data = data;
}
}

View File

@ -0,0 +1,282 @@
package cn.palmte.work.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.hibernate.annotations.GenericGenerator;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* Created by wang.lin@esstx.cn on 2018/7/17.
*/
@Entity
@Table(name = "sys_user")
public class Admin implements Serializable{
public static final int ENABLED = 1;
public static final int DISABLED = 0;
public static final int LOCKED = 1;
public static final int UN_LOCKED = 0;
//删除
public static final int DELETED = 1;
//未删
public static final int UN_DELETED = 0;
private static final long serialVersionUID = 8788969524794365369L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@GenericGenerator(name = "persistenceGenerator", strategy = "increment")
private Integer id;
@Column(name = "user_name")
private String userName;
private String password;
private String salt;
@Column(name = "real_name")
private String realName;
private String telephone;
private int enabled;
@Column(name = "login_error_count")
private int loginErrorCount;
private int locked;
@Column(name = "locked_date")
private Date lockedDate;
@Column(name = "login_date")
private Date loginDate;
@Column(name = "login_ip")
private String loginIp;
@Column(name = "is_deleted")
private boolean isDeleted;
@Column(name = "created_by")
private Integer createdBy;
@Column(name = "created_time")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createdTime;
@Column(name = "last_updated_by")
private Integer lastUpdatedBy;
@Column(name = "last_updated_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date lastUpdatedTime;
@Column(name = "region_id")
private int regionId;
@Column(name = "region_name")
private String regionName;
@Column(name = "updated__password_time")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updatedPasswordTime;
@Transient
private int roleId;
@Transient
private String roleName;
@Transient
private int roleType;
@Transient
private int roleLevel;
@Transient
private String roleTypeName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public int getEnabled() {
return enabled;
}
public void setEnabled(int enabled) {
this.enabled = enabled;
}
public int getLoginErrorCount() {
return loginErrorCount;
}
public void setLoginErrorCount(int loginErrorCount) {
this.loginErrorCount = loginErrorCount;
}
public int getLocked() {
return locked;
}
public void setLocked(int locked) {
this.locked = locked;
}
public Date getLockedDate() {
return lockedDate;
}
public void setLockedDate(Date lockedDate) {
this.lockedDate = lockedDate;
}
public Date getLoginDate() {
return loginDate;
}
public void setLoginDate(Date loginDate) {
this.loginDate = loginDate;
}
public String getLoginIp() {
return loginIp;
}
public void setLoginIp(String loginIp) {
this.loginIp = loginIp;
}
public boolean isDeleted() {
return isDeleted;
}
public void setDeleted(boolean deleted) {
isDeleted = deleted;
}
public Integer getCreatedBy() {
return createdBy;
}
public void setCreatedBy(Integer createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public Integer getLastUpdatedBy() {
return lastUpdatedBy;
}
public void setLastUpdatedBy(Integer lastUpdatedBy) {
this.lastUpdatedBy = lastUpdatedBy;
}
public Date getLastUpdatedTime() {
return lastUpdatedTime;
}
public void setLastUpdatedTime(Date lastUpdatedTime) {
this.lastUpdatedTime = lastUpdatedTime;
}
public Date getUpdatedPasswordTime() {
return updatedPasswordTime;
}
public void setUpdatedPasswordTime(Date updatedPasswordTime) {
this.updatedPasswordTime = updatedPasswordTime;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
public int getRoleLevel() {
return roleLevel;
}
public void setRoleLevel(int roleLevel) {
this.roleLevel = roleLevel;
}
public int getRoleType() {
return roleType;
}
public void setRoleType(int roleType) {
this.roleType = roleType;
}
public String getRoleTypeName() {
return roleTypeName;
}
public void setRoleTypeName(String roleTypeName) {
this.roleTypeName = roleTypeName;
}
public int getRegionId() {
return regionId;
}
public void setRegionId(int regionId) {
this.regionId = regionId;
}
public String getRegionName() {
return regionName;
}
public void setRegionName(String regionName) {
this.regionName = regionName;
}
}

View File

@ -0,0 +1,37 @@
package cn.palmte.work.model;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import javax.transaction.Transactional;
import java.util.List;
public interface AdminRepository extends JpaRepository<Admin, Integer> {
@Query("from Admin where isDeleted=0 AND enabled=1 AND userName=?1")
Admin getAdminByUsername(String username);
@Query("from Admin where isDeleted=0 AND enabled=1 AND userName=?1")
List<Admin> getAdminByUsernameList(String username);
@Query("from Admin where isDeleted=0 AND userName=?1")
List<Admin> getAdminByUsernameListNoEnabled(String username);
@Query("from Admin where isDeleted=0 AND realName=?1")
Admin getAdminByRealName(String realName);
/**
* id
*
* @param id
* @return
*/
@Transactional
@Query("from Admin where isDeleted=0 AND id=?1")
Admin getAdminById(int id);
@Query("from Admin where isDeleted=0 AND telephone=?1")
Admin findByTelephone(String phone);
}

View File

@ -0,0 +1,43 @@
package cn.palmte.work.model;
import cn.palmte.work.model.SysRole;
import top.jfunc.common.db.bean.Page;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
public interface AdminRepositoryCustom {
List<String> getAuthoritiesName(String adminId);
List<String> getAuthoritieUrls(String adminId);
List<String> getRolesName(String adminId);
/**
* ID
* @return
*/
Admin findAdminByUserName(String userName);
SysRole getRole(String adminId);
/**
*
* @param searchInfo
* @param pageSize
* @param pageNum
* @return
*/
Page getAdminList(ConcurrentHashMap<String, String> searchInfo, int pageSize, int pageNum);
/**
* ID
* @param userId
* @return
*/
Admin findAdminById(int userId);
List<SysPermission> getAuthoritieUrlsByParentPermission(String adminId, String permission);
}

View File

@ -0,0 +1,250 @@
package cn.palmte.work.model;
import cn.palmte.work.utils.InterfaceUtil;
import cn.palmte.work.utils.ObjectKit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import top.jfunc.common.db.bean.Page;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigInteger;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Repository
public class AdminRepositoryImpl implements AdminRepositoryCustom {
private static final Logger logger = LoggerFactory.getLogger(AdminRepositoryImpl.class);
@Autowired
@PersistenceContext
private EntityManager entityManager;
@Override
public List<String> getAuthoritiesName(String adminId) {
List<String> returnList = new ArrayList<>();
String sql = " select p.permission from sys_user u, sys_user_role ur, sys_role r, sys_role_permission rp, sys_permission p "
+ " where u.is_deleted = 0 and ur.is_deleted = 0 and r.is_deleted = 0 and rp.is_deleted = 0 and p.is_deleted = 0 "
+ " and u.id = ur.user_id and ur.role_id = r.id and r.id = rp.role_id and rp.permission_id = p.id "
+ " and r.is_enable=1 and u.id=:adminId";
Query nativeQuery = entityManager.createNativeQuery(sql);
nativeQuery.setParameter("adminId", adminId);
List<String> resultList = nativeQuery.getResultList();
for (String objects : resultList) {
String permission = objects;
returnList.add(permission);
}
return returnList;
}
@Override
public List<String> getAuthoritieUrls(String adminId) {
List<String> returnList = new ArrayList<>();
String sql = " select p.url from sys_user u, sys_user_role ur, sys_role r, sys_role_permission rp, sys_permission p "
+ " where u.is_deleted = 0 and ur.is_deleted = 0 and r.is_deleted = 0 and rp.is_deleted = 0 and p.is_deleted = 0 "
+ " and u.id = ur.user_id and ur.role_id = r.id and r.id = rp.role_id and rp.permission_id = p.id "
+ " and r.is_enable=1 and u.id=:adminId";
Query nativeQuery = entityManager.createNativeQuery(sql);
nativeQuery.setParameter("adminId", adminId);
List<String> resultList = nativeQuery.getResultList();
for (String objects : resultList) {
String permission = objects;
returnList.add(permission);
}
return returnList;
}
@Override
public List<String> getRolesName(String adminId) {
String sql = " select r.name,r.id from sys_user u, sys_user_role ur, sys_role r where u.is_deleted = 0 " +
"and ur.is_deleted = 0 and r.is_deleted = 0 and r.is_enable=1 and u.id = ur.user_id and " +
" r.id = ur.role_id and u.id=:id";
List<String> returnList = new ArrayList<>();
Query nativeQuery = entityManager.createNativeQuery(sql);
nativeQuery.setParameter("id", adminId);
List<Object[]> resultList = nativeQuery.getResultList();
for (Object[] objects : resultList) {
String permission = (objects != null && objects.length > 0) ? objects[0].toString() : "";
returnList.add(permission);
}
return returnList;
}
@Override
public Admin findAdminByUserName(String userName) {
String sql = " select u.id,u.user_name,u.real_name,r.type,r.id as rId,r.name,u.salt,r.level from sys_user u, sys_user_role ur, sys_role r where u.is_deleted = 0 " +
"and ur.is_deleted = 0 and r.is_deleted = 0 and u.id = ur.user_id and " +
" r.id = ur.role_id and u.user_name=:userName";
Query nativeQuery = entityManager.createNativeQuery(sql);
nativeQuery.setParameter("userName", userName);
List<Object[]> resultList = nativeQuery.getResultList();
Admin admin = null;
if (!resultList.isEmpty()) {
for (Object[] objects : resultList) {
admin = new Admin();
admin.setId(ObjectKit.toInt(objects[0]));
admin.setUserName(ObjectKit.toString(objects[1]));
admin.setRealName(ObjectKit.toString(objects[2]));
admin.setRoleType(ObjectKit.toInt(objects[3]));
admin.setRoleId(ObjectKit.toInt(objects[4]));
admin.setRoleName(ObjectKit.toString(objects[5]));
admin.setSalt(ObjectKit.toString(objects[6]));
admin.setRoleLevel(ObjectKit.toInt(objects[7]));
}
}
return admin;
}
@Override
public SysRole getRole(String adminId) {
String sql = " select r.* from sys_user u, sys_user_role ur, sys_role r where u.is_deleted = 0 " +
"and ur.is_deleted = 0 and r.is_deleted = 0 and r.is_enable=1 and u.id = ur.user_id and " +
" r.id = ur.role_id and u.id=:id";
Query nativeQuery = entityManager.createNativeQuery(sql, SysRole.class);
nativeQuery.setParameter("id", adminId);
SysRole object = (SysRole) nativeQuery.getSingleResult();
return object;
}
@Override
public Page getAdminList(ConcurrentHashMap<String, String> searchInfo, int pageSize, int pageNum) {
Page page = new Page(pageNum, pageSize);
int thisPage = (pageNum - 1) * pageSize;
String sql = getSelect() + getSqlExceptSelect(searchInfo) + " limit " + thisPage + "," + pageSize;
String countSql = " SELECT COUNT(*) FROM(" + getSelect() + getSqlExceptSelect(searchInfo) + ") count_table";
Query nativeQuery = entityManager.createNativeQuery(sql.toString());
Query countQuery = entityManager.createNativeQuery(countSql);
List<Object[]> resultList = nativeQuery.getResultList();
List<Admin> admins = new ArrayList<>();
Admin admin = null;
page.setTotalRow(((BigInteger) countQuery.getSingleResult()).intValue());
for (Object[] objects : resultList) {
admin = new Admin();
admin.setId(ObjectKit.toInt(objects[0]));
admin.setUserName(ObjectKit.toString(objects[1]));
admin.setEnabled(ObjectKit.toInt(objects[4]));
admin.setRealName(ObjectKit.toString(objects[2]));
admin.setTelephone(ObjectKit.toString(objects[7]));
admin.setRoleName(ObjectKit.toString(objects[6]));
try {
admin.setCreatedTime(ObjectKit.toDate(objects[3]));
} catch (ParseException e) {
logger.error("账号创建时间转换错误" + e.toString());
}
admins.add(admin);
}
page.setList(admins);
return page;
}
public String getSelect() {
String select = " select u.id,u.user_name,u.real_name,u.created_time,u.enabled,r.type,r.name,u.telephone,u.region_name";
return select;
}
public String getSqlExceptSelect(ConcurrentHashMap<String, String> searchInfo) {
StringBuffer sqlExceptSelect = new StringBuffer(" from sys_user u LEFT JOIN sys_user_role ur on u.id = ur.user_id LEFT JOIN sys_role r on r.id = ur.role_id ");
Admin admin = InterfaceUtil.getAdmin();
//String sql = " where u.is_deleted = 0 and ur.is_deleted = 0 and r.is_deleted = 0 and r.is_enable=1 and u.id!=1 and u.id!=" + InterfaceUtil.getAdminId();
String sql = " where u.is_deleted = 0 and ur.is_deleted = 0 and r.is_deleted = 0 and r.is_enable=1 ";
sqlExceptSelect.append(sql);
for (Map.Entry<String, String> item : searchInfo.entrySet()) {
sqlExceptSelect.append(buildQuery(item));
}
sqlExceptSelect.append(" order by u.id desc ");
return sqlExceptSelect.toString();
}
private String buildQuery(Map.Entry<String, String> item) {
String sql = "";
if (item.getKey().equals("userName")) {
sql += " and u.user_name like '%" + item.getValue() + "%' ";
} else if (item.getKey().equals("telephone")) {
sql += " and u.telephone= " + item.getValue();
} else if (item.getKey().equals("regionId")) {
if (!item.getValue().equals("-1")) {
sql += " and u.region_id= " + item.getValue();
}
} else if (item.getKey().equals("roleId")) {
if (!item.getValue().equals("-1")) {
sql += " and r.id= " + item.getValue();
}
}
return sql;
}
/**
*
*
* @param type
* @return
*/
private List<Admin> getAllRolesByType(int type) {
String sql = "select * from sys_user u " +
" left join sys_user_role ur on ur.user_id=u.id" +
" left join sys_role r on r.id = ur.role_id" +
" where u.is_deleted = 0 and ur.is_deleted = 0 and r.is_deleted = 0 and r.is_enable=1" +
" and r.type=:type";
return entityManager.createNativeQuery(sql, Admin.class).setParameter("type", type).getResultList();
}
@Override
public Admin findAdminById(int userId) {
String sql = " select u.id,u.user_name,u.real_name,r.type,r.id as rId,u.telephone,u.region_id,r.level from sys_user u, sys_user_role ur, sys_role r where u.is_deleted = 0 " +
"and ur.is_deleted = 0 and r.is_deleted = 0 and r.is_enable=1 and u.id = ur.user_id and " +
" r.id = ur.role_id and u.id=:userId";
Query nativeQuery = entityManager.createNativeQuery(sql);
nativeQuery.setParameter("userId", userId);
List<Object[]> resultList = nativeQuery.getResultList();
Admin admin = null;
if (!resultList.isEmpty()) {
for (Object[] objects : resultList) {
admin = new Admin();
admin.setId(ObjectKit.toInt(objects[0]));
admin.setUserName(ObjectKit.toString(objects[1]));
admin.setRealName(ObjectKit.toString(objects[2]));
admin.setRoleType(ObjectKit.toInt(objects[3]));
admin.setRoleId(ObjectKit.toInt(objects[4]));
admin.setTelephone(ObjectKit.toString(objects[5]));
admin.setRegionId(ObjectKit.toInt(objects[6]));
admin.setRoleLevel(ObjectKit.toInt(objects[7]));
}
}
return admin;
}
@Override
public List<SysPermission> getAuthoritieUrlsByParentPermission(String adminId, String permission) {
List<SysPermission> returnList = new ArrayList<>();
String sql = " select distinct p.url,p.name,p.permission,p.sort from sys_user u, sys_user_role ur, sys_role r, sys_role_permission rp, sys_permission p "
+ " where u.is_deleted = 0 and ur.is_deleted = 0 and r.is_deleted = 0 and rp.is_deleted = 0 and p.is_deleted = 0 "
+ " and u.id = ur.user_id and ur.role_id = r.id and r.id = rp.role_id and rp.permission_id = p.id "
+ " and r.is_enable=1 and u.id=:adminId and p.parent_id = (select id from sys_permission sp where sp.permission=:permission)";
Query nativeQuery = entityManager.createNativeQuery(sql);
nativeQuery.setParameter("adminId", adminId);
nativeQuery.setParameter("permission", permission);
List<Object[]> resultList = nativeQuery.getResultList();
for (Object[] objects : resultList) {
SysPermission sysPermission = new SysPermission();
sysPermission.setUrl((String) objects[0]);
sysPermission.setName((String) objects[1]);
sysPermission.setPermission((String) objects[2]);
sysPermission.setSort((Integer) objects[3]);
returnList.add(sysPermission);
}
return returnList;
}
}

View File

@ -0,0 +1,22 @@
package cn.palmte.work.model;
import org.springframework.context.ApplicationEvent;
/**
* @author ZM
* @date 2018/9/21
*/
public class ExcelEvent extends ApplicationEvent {
private ExportExcelBean exportExcelBean;
public ExcelEvent(Object source, ExportExcelBean exportExcelBean) {
super(source);
this.exportExcelBean = exportExcelBean;
}
public ExportExcelBean getExportExcelBean() {
return exportExcelBean;
}
}

View File

@ -0,0 +1,89 @@
package cn.palmte.work.model;
/**
*
*/
public class ExportExcelBean {
/**
* Id
*/
private String taskId;
/**
*
*/
private String[] headers;//
/**
*
*/
private String[] columns;//
/**
* SQL
*/
private String sql;
/**
*
*/
private String fileName;
/**
*
*/
private String exportFilePath;
/**
*
*/
private String exportFileUrl;
/**
*
*/
private int who;
/**
*
*/
private String realName;
public ExportExcelBean(String taskId, String[] headers, String[] columns, String sql, String fileName, String exportFilePath, String exportFileUrl, int who, String realName) {
this.taskId = taskId;
this.headers = headers;
this.columns = columns;
this.sql = sql;
this.fileName = fileName;
this.exportFilePath = exportFilePath;
this.exportFileUrl = exportFileUrl;
this.who = who;
this.realName = realName;
}
public String getTaskId() { return this.taskId;}
public String[] getHeaders() {
return headers;
}
public String[] getColumns() {
return columns;
}
public String getSql() {
return sql;
}
public String getFileName() {
return fileName;
}
public String getExportFilePath() {
return exportFilePath;
}
public String getExportFileUrl() {
return exportFileUrl;
}
public int getWho(){return who;}
public String getRealName() {
return realName;
}
}

View File

@ -0,0 +1,78 @@
package cn.palmte.work.model;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.Date;
/**
*
*/
@Entity
@Table(name = "login_log")
public class LoginLog {
public static final int FAILED = 1;
public static final int SUCCESS = 0;
/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@GenericGenerator(name = "persistenceGenerator", strategy = "increment")
private Integer id;
private String name;
private int status;
@Column(name = "status_desc")
private String statusDesc;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "create_time")
private Date createTime;
public LoginLog() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getStatusDesc() {
return statusDesc;
}
public void setStatusDesc(String statusDesc) {
this.statusDesc = statusDesc;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}

View File

@ -0,0 +1,6 @@
package cn.palmte.work.model;
import org.springframework.data.jpa.repository.JpaRepository;
public interface LoginLogRepository extends JpaRepository<LoginLog,Integer> {
}

View File

@ -0,0 +1,90 @@
package cn.palmte.work.model;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.Date;
/**
*
*/
@Entity
@Table(name = "slide_captcha")
public class SlideCaptcha {
public static final int STATUS_INIT = 0;
public static final int STATUS_SUCCESS = 1;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@GenericGenerator(name = "persistenceGenerator", strategy = "increment")
private Integer id;
@Column(name = "serial_number")
private String serialNumber;
private String identifier;
private int x;
private int y;
private int status;
/**
*
*/
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "modify_time")
private Date modifyTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
public String getIdentifier() {
return identifier;
}
public void setIdentifier(String identifier) {
this.identifier = identifier;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public Date getModifyTime() {
return modifyTime;
}
public void setModifyTime(Date modifyTime) {
this.modifyTime = modifyTime;
}
}

View File

@ -0,0 +1,8 @@
package cn.palmte.work.model;
import org.springframework.data.jpa.repository.JpaRepository;
public interface SlideCaptchaRepository extends JpaRepository<SlideCaptcha, Integer> {
SlideCaptcha findFirstBySerialNumberEquals(String identifier);
}

View File

@ -0,0 +1,201 @@
package cn.palmte.work.model;
import javax.persistence.*;
import java.util.Date;
@Entity
@Table(name = "sys_permission")
public class SysPermission {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
@Column(name = "icon")
private String icon;
@Column(name = "url")
private String url;
@Column(name = "permission")
private String permission;
@Column(name = "parent_id")
private int parentId;
@Column(name = "level")
private int level;
@Column(name = "type")
private int type;
@Column(name = "sort")
private int sort;
@Column(name = "remark")
private String remark;
@Column(name = "is_deleted")
private int isDeleted;
@Column(name = "created_by")
private int createdBy;
@Column(name = "created_time")
private Date createdTime;
@Column(name = "last_updated_by")
private int lastUpdatedBy;
@Column(name = "last_updated_time")
private Date lastUpdatedTime;
@Transient
private String creator;
@Transient
private String updator;
public SysPermission() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getPermission() {
return permission;
}
public void setPermission(String permission) {
this.permission = permission;
}
public int getParentId() {
return parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getSort() {
return sort;
}
public void setSort(int sort) {
this.sort = sort;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public int getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(int isDeleted) {
this.isDeleted = isDeleted;
}
public int getCreatedBy() {
return createdBy;
}
public void setCreatedBy(int createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public int getLastUpdatedBy() {
return lastUpdatedBy;
}
public void setLastUpdatedBy(int lastUpdatedBy) {
this.lastUpdatedBy = lastUpdatedBy;
}
public Date getLastUpdatedTime() {
return lastUpdatedTime;
}
public void setLastUpdatedTime(Date lastUpdatedTime) {
this.lastUpdatedTime = lastUpdatedTime;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getUpdator() {
return updator;
}
public void setUpdator(String updator) {
this.updator = updator;
}
}

View File

@ -0,0 +1,34 @@
package cn.palmte.work.model;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface SysPermissionRepository extends JpaRepository<SysPermission, Integer> {
@Query(" from SysPermission sp where sp.isDeleted=0 AND sp.level=?1 order by sort asc")
public List<SysPermission> findSysPermissionByLevel(int level);
@Query(" from SysPermission sp where sp.isDeleted=0 AND (sp.parentId=?1 OR sp.parentId in (select id from SysPermission where isDeleted = 0 and parentId in?1 )) order by sort asc")
public List<SysPermission> findSysPermissionByParentId(int parentId);
@Query(" from SysPermission where isDeleted=0 AND id in (select permissionId FROM SysRolePermission WHERE isDeleted=0 AND roleId =?1 ) ORDER BY level ASC,sort ASC ")
public List<SysPermission> findPermissionByRoleId(int roleId);
@Query(" from SysPermission sp where sp.isDeleted=0 order by sort asc")
public List<SysPermission> findAllPermission();
@Query(" select sp.url from SysPermission sp where sp.isDeleted=0 order by sort asc")
public List<String> findAllPermissionUrls();
@Query(" from SysPermission sp where sp.isDeleted=0 AND sp.level<5 order by id asc")
List<SysPermission> findPermissions();
}

View File

@ -0,0 +1,16 @@
package cn.palmte.work.model;
import top.jfunc.common.db.bean.Page;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public interface SysPermissionRepositoryCustom {
/**
*
* @param searchInfo
* @param pageNumber
* @return
*/
public Page<SysPermission> getAllPermissionListByPage(ConcurrentHashMap<String, String> searchInfo, String pageNumber);
}

View File

@ -0,0 +1,133 @@
package cn.palmte.work.model;
import cn.palmte.work.utils.DateKit;
import cn.palmte.work.utils.ObjectKit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import top.jfunc.common.db.bean.Page;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigInteger;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Repository
public class SysPermissionRepositoryImpl implements SysPermissionRepositoryCustom {
@Autowired
@PersistenceContext
private EntityManager entityManager;
@Override
public Page<SysPermission> getAllPermissionListByPage(ConcurrentHashMap<String, String> searchInfo, String pageNumber) {
Page<SysPermission> pager = new Page(Integer.parseInt(pageNumber));
int pageSize=pager.getPageSize();
int thisPage = (Integer.parseInt(pageNumber) - 1) * pageSize;
String sql=getSelect()+getSqlExceptSelect(searchInfo)+ " limit " + thisPage + "," + pageSize;
String countSql=" SELECT COUNT(*) FROM("+getSelect()+getSqlExceptSelect(searchInfo)+") count_table";
Query nativeQuery= entityManager.createNativeQuery(sql);
Query countQuery= entityManager.createNativeQuery(countSql);
BigInteger totalRow=new BigInteger("0");
List<Object[]> list= nativeQuery.getResultList();
List<SysPermission> resultList=new ArrayList();
if (null!=list&&list.size()>0){
// 总条数
totalRow=(BigInteger)countQuery.getSingleResult();
for (Object[] objs:list){
SysPermission permission=new SysPermission();
permission.setId(ObjectKit.toInt(objs[0]));
permission.setName(ObjectKit.toString(objs[1]));
permission.setUrl(ObjectKit.toString(objs[3]));
permission.setPermission(ObjectKit.toString(objs[4]));
permission.setParentId(ObjectKit.toInt(objs[5]));
permission.setLevel(ObjectKit.toInt(objs[6]));
permission.setType(ObjectKit.toInt(objs[7]));
permission.setSort(ObjectKit.toInt(objs[8]));
permission.setRemark(ObjectKit.toString(objs[9]));
if(objs[10]!=null){
if((Boolean) objs[10]){
permission.setIsDeleted(1);
}else {
permission.setIsDeleted(0);
}
}
Date createTime = null;
Date lastUpdateTime = null;
try {
if(objs[12]!=null){
createTime = DateKit.getDate(objs[12].toString());
}
if(objs[14]!=null){
lastUpdateTime = DateKit.getDate(objs[14].toString());
}
} catch (Exception e) {
e.printStackTrace();
}
permission.setCreatedTime(createTime);
permission.setCreator(ObjectKit.toString(objs[15]));
permission.setUpdator(ObjectKit.toString(objs[16]));
permission.setLastUpdatedTime(lastUpdateTime);
resultList.add(permission);
}
}
pager.setList(resultList);
pager.setTotalRow(totalRow.intValue());
return pager;
}
public String getSelect(){
String select = " select p.*, (select user_name from sys_user u where p.created_by = u.id) as creator, "
+ " (select user_name from sys_user u where p.last_updated_by = u.id) as updator ";
return select;
}
public String getSqlExceptSelect(ConcurrentHashMap<String, String> searchInfo){
// StringBuffer sqlExceptSelect=new StringBuffer(" from sys_permission p where 1=1 and is_deleted= 0 ");
StringBuffer sqlExceptSelect=new StringBuffer(" from sys_permission p where 1=1 ");
for(Map.Entry<String, String> item : searchInfo.entrySet()){
sqlExceptSelect.append(buildQuery(item));
}
sqlExceptSelect.append( " order by p.created_time desc");
return sqlExceptSelect.toString();
}
private String buildQuery(Map.Entry<String, String> item){
StringBuffer sql= new StringBuffer("");
if(item.getKey().equals("pmsName")){
sql.append( " and p.name like '%" + item.getValue() + "%' ");
} else if(item.getKey().equals("pmsParentID")){
sql.append( " and p.parent_id = " + item.getValue());
} else if(item.getKey().equals("pmsLevel") && !"0".equals(item.getValue())){
sql.append( " and p.level = " + item.getValue());
} else if(item.getKey().equals("pmsType") && !"0".equals(item.getValue())){
sql.append( " and p.type = " + item.getValue());
} else if(item.getKey().equals("pmsID")){
sql.append( " and p.id = " + item.getValue());
} else if(item.getKey().equals("pmsUrl")){
sql.append( " and p.url = '" + item.getValue() + "' ");
} else if(item.getKey().equals("pmsDeleted") && !"-1".equals(item.getValue())){
sql.append( " and p.is_deleted = " + item.getValue() + " ");
}else if(item.getKey().equals("pmsCode")){
sql.append( " and p.permission = '" + item.getValue() + "' ");
}
return sql.toString();
}
}

View File

@ -0,0 +1,132 @@
package cn.palmte.work.model;
import javax.persistence.*;
import java.util.Date;
@Entity
@Table(name = "sys_role")
public class SysRole {
//智慧工地系统管理员
public static final int ROLE_TYPE_1 = 1;
//市级管理员
public static final int ROLE_TYPE_2 = 2;
//环保局管理员
public static final int ROLE_TYPE_3 = 3;
//网格管理员
public static final int ROLE_TYPE_4 = 4;
//工地巡查员
public static final int ROLE_TYPE_8 = 8;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
@Column(name = "type")
private int type;
@Column(name = "level")
private int level;
@Column(name = "is_enable")
private int isEnable;
@Column(name = "is_deleted")
private int deleted;
@Column(name = "created_by")
private int createdBy;
@Column(name = "created_time")
private Date createdTime;
@Column(name = "last_updated_by")
private int lastUpdatedBy;
@Column(name = "last_updated_time")
private Date lastUpdatedTime;
public SysRole() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public int getIsEnable() {
return isEnable;
}
public void setIsEnable(int isEnable) {
this.isEnable = isEnable;
}
public int getDeleted() {
return deleted;
}
public void setDeleted(int deleted) {
this.deleted = deleted;
}
public int getCreatedBy() {
return createdBy;
}
public void setCreatedBy(int createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public int getLastUpdatedBy() {
return lastUpdatedBy;
}
public void setLastUpdatedBy(int lastUpdatedBy) {
this.lastUpdatedBy = lastUpdatedBy;
}
public Date getLastUpdatedTime() {
return lastUpdatedTime;
}
public void setLastUpdatedTime(Date lastUpdatedTime) {
this.lastUpdatedTime = lastUpdatedTime;
}
}

View File

@ -0,0 +1,100 @@
package cn.palmte.work.model;
import javax.persistence.*;
import java.util.Date;
@Entity
@Table(name = "sys_role_permission")
public class SysRolePermission {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "role_id")
private int roleId;
@Column(name = "permission_id")
private int permissionId;
@Column(name = "is_deleted")
private int isDeleted;
@Column(name = "created_by")
private int createdBy;
@Column(name = "created_time")
private Date createdTime;
@Column(name = "last_updated_by")
private int lastUpdatedBy;
@Column(name = "last_updated_time")
private Date lastUpdatedTime;
public SysRolePermission() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
public int getPermissionId() {
return permissionId;
}
public void setPermissionId(int permissionId) {
this.permissionId = permissionId;
}
public int getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(int isDeleted) {
this.isDeleted = isDeleted;
}
public int getCreatedBy() {
return createdBy;
}
public void setCreatedBy(int createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public int getLastUpdatedBy() {
return lastUpdatedBy;
}
public void setLastUpdatedBy(int lastUpdatedBy) {
this.lastUpdatedBy = lastUpdatedBy;
}
public Date getLastUpdatedTime() {
return lastUpdatedTime;
}
public void setLastUpdatedTime(Date lastUpdatedTime) {
this.lastUpdatedTime = lastUpdatedTime;
}
}

View File

@ -0,0 +1,26 @@
package cn.palmte.work.model;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Transactional
public interface SysRolePermissionRepository extends JpaRepository<SysRolePermission, Integer> {
@Modifying
@Query(" delete from SysRolePermission where permissionId = ?1 ")
public int deleteSysRolePermissionByPermissionId(int permission_id);
@Query(" from SysRolePermission where roleId=?1 ")
public List<SysRolePermission> findPerListByRoleId(int role_id);
@Modifying
@Query(" delete from SysRolePermission where roleId=?1")
public int deleteSysRolePermissionByRoleId(int role_id);
}

View File

@ -0,0 +1,9 @@
package cn.palmte.work.model;
public interface SysRolePermissionRepositoryCustom {
}

View File

@ -0,0 +1,20 @@
package cn.palmte.work.model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Repository
public class SysRolePermissionRepositoryImpl implements SysRolePermissionRepositoryCustom {
private static final Logger logger = LoggerFactory.getLogger(SysRolePermissionRepositoryImpl.class);
@Autowired
@PersistenceContext
private EntityManager entityManager;
}

View File

@ -0,0 +1,52 @@
package cn.palmte.work.model;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface SysRoleRepository extends JpaRepository<SysRole, Integer> {
/**
*
* @return
*/
@Query(" from SysRole sp where sp.deleted=0 order by last_updated_time asc")
public List<SysRole> findAllRole();
/**
* id
* @param id
* @return
*/
@Query(" from SysRole sp where sp.deleted=0 and sp.id=?1 ")
public SysRole findSysRoleById(int id);
/**
*
* @param type
* @return
*/
@Query(" from SysRole role where role.deleted=0 and type=?1 order by last_updated_time asc")
List<SysRole> findRoleByType(int type);
@Query(" select COUNT(1) from SysRole where id!=?1 and name=?2 and deleted=0 ")
public int cheakRoleName(int id, String name);
/**
*
* @return
*/
@Query(" from SysRole where deleted=0 and isEnable=1 AND type=0 ")
public SysRole findSuperAdminRole();
/**
*
* @return
*/
@Query(" from SysRole where deleted=0 and isEnable=1 and type = 1")
List<SysRole> getAllEnableSysRole();
}

View File

@ -0,0 +1,34 @@
package cn.palmte.work.model;
import top.jfunc.common.db.bean.Page;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public interface SysRoleRepositoryCustom {
/**
*
* @param searchInfo
* @param pageNumber
* @return
*/
public Page<SysRole> getAllRoleListByPage(ConcurrentHashMap<String, String> searchInfo, String pageNumber, int roleType);
/**
*
* @return
*/
List<SysRole> geBelowRoleTypes(int roleType);
/**
*
* @param roleType
* @return
*/
List<SysRole> getBelowTypes(int roleType);
}

View File

@ -0,0 +1,195 @@
package cn.palmte.work.model;
import cn.palmte.work.utils.DateKit;
import cn.palmte.work.utils.InterfaceUtil;
import cn.palmte.work.utils.ObjectKit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import top.jfunc.common.db.bean.Page;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigInteger;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Repository
public class SysRoleRepositoryImpl implements SysRoleRepositoryCustom {
private static final Logger logger = LoggerFactory.getLogger(SysRoleRepositoryImpl.class);
@Autowired
@PersistenceContext
private EntityManager entityManager;
@Override
public Page<SysRole> getAllRoleListByPage(ConcurrentHashMap<String, String> searchInfo, String pageNumber, int roleType) {
Page<SysRole> pager = new Page(Integer.parseInt(pageNumber));
int pageSize=pager.getPageSize();
int thisPage = (Integer.parseInt(pageNumber) - 1) * pageSize;
String sql=getSelect()+getSqlExceptSelect(searchInfo,roleType)+ " limit " + thisPage + "," + pageSize;
String countSql=" SELECT COUNT(*) FROM("+getSelect()+getSqlExceptSelect(searchInfo,roleType)+") count_table";
Query nativeQuery= entityManager.createNativeQuery(sql);
Query countQuery= entityManager.createNativeQuery(countSql);
// 总条数
BigInteger totalRow=new BigInteger("0");
List<Object[]> list= nativeQuery.getResultList();
List<SysRole> resultList=new ArrayList();
if (!list.isEmpty()){
totalRow=(BigInteger)countQuery.getSingleResult();
for (Object[] objs:list){
SysRole role=new SysRole();
role.setId(ObjectKit.toInt(objs[0]));
role.setName(ObjectKit.toString(objs[1]));
role.setType(ObjectKit.toInt(objs[2]));
role.setLevel(ObjectKit.toInt(objs[3]));
role.setIsEnable(ObjectKit.toInt(objs[4]));
role.setDeleted(ObjectKit.toInt(objs[5]));
role.setCreatedBy(ObjectKit.toInt(objs[6]));
role.setLastUpdatedBy(ObjectKit.toInt(objs[8]));
Date createTime = null;
Date lastUpdateTime = null;
try {
if (objs[7] != null) {
createTime = DateKit.getDate(objs[7].toString());
}
if (objs[9] != null) {
lastUpdateTime = DateKit.getDate(objs[9].toString());
}
} catch (Exception e) {
e.printStackTrace();
}
role.setCreatedTime(createTime);
role.setLastUpdatedTime(lastUpdateTime);
resultList.add(role);
}
}
pager.setList(resultList);
pager.setTotalRow(totalRow.intValue());
return pager;
}
@Override
public List<SysRole> geBelowRoleTypes(int roleType) {
ConcurrentHashMap<String, String> searchInfo = new ConcurrentHashMap<>();
String sql = "select * from sys_role where is_deleted=0 and is_enable=1 and type!=0";
//获取当前角色等级的下一级角色类型
Query nativeQuery = null;
if (roleType > 0) {
sql = sql + " and type>:roleType ";
nativeQuery = entityManager.createNativeQuery(sql);
nativeQuery.setParameter("roleType", roleType);
} else {
nativeQuery = entityManager.createNativeQuery(sql);
}
List<Object[]> list = nativeQuery.getResultList();
List<SysRole> resultList = new ArrayList();
for (Object[] objs : list) {
SysRole role = new SysRole();
role.setId(ObjectKit.toInt(objs[0]));
role.setName(ObjectKit.toString(objs[1]));
role.setType(ObjectKit.toInt(objs[2]));
role.setLevel(ObjectKit.toInt(objs[3]));
role.setIsEnable(ObjectKit.toInt(objs[4]));
role.setDeleted(ObjectKit.toInt(objs[5]));
role.setCreatedBy(ObjectKit.toInt(objs[6]));
role.setLastUpdatedBy(ObjectKit.toInt(objs[8]));
Date createTime = null;
Date lastUpdateTime = null;
try {
if (objs[7] != null) {
createTime = DateKit.getDate(objs[7].toString());
}
if(objs[9]!=null){
lastUpdateTime = DateKit.getDate(objs[9].toString());
}
} catch (Exception e) {
e.printStackTrace();
}
role.setCreatedTime(createTime);
role.setLastUpdatedTime(lastUpdateTime);
resultList.add(role);
}
return resultList;
}
@Override
public List<SysRole> getBelowTypes(int roleType) {
String sql = "select * from sys_role where is_deleted=0 and is_enable=1 ";
//获取当前角色等级的下一级角色类型
Query nativeQuery = null;
sql = sql + " and type>:roleType";
nativeQuery = entityManager.createNativeQuery(sql);
nativeQuery.setParameter("roleType", roleType);
List<Object[]> list = nativeQuery.getResultList();
List<SysRole> resultList = new ArrayList();
for (Object[] objs : list) {
SysRole role = new SysRole();
role.setId(ObjectKit.toInt(objs[0]));
role.setName(ObjectKit.toString(objs[1]));
role.setType(ObjectKit.toInt(objs[2]));
role.setLevel(ObjectKit.toInt(objs[3]));
role.setIsEnable(ObjectKit.toInt(objs[4]));
role.setDeleted(ObjectKit.toInt(objs[5]));
role.setCreatedBy(ObjectKit.toInt(objs[6]));
role.setLastUpdatedBy(ObjectKit.toInt(objs[8]));
Date createTime = null;
Date lastUpdateTime = null;
try {
if(objs[7]!=null){
createTime = DateKit.getDate(objs[7].toString());
}
if(objs[9]!=null){
lastUpdateTime = DateKit.getDate(objs[9].toString());
}
} catch (Exception e) {
e.printStackTrace();
}
role.setCreatedTime(createTime);
role.setLastUpdatedTime(lastUpdateTime);
resultList.add(role);
}
return resultList;
}
public String getSelect(){
String select = "select tsr.*";
return select;
}
public String getSqlExceptSelect(ConcurrentHashMap<String, String> searchInfo,int roleType){
// 判断是否是系统管理员
String str=roleType==0?">=":">";
String sqlExceptSelect = "from sys_role tsr where type "+str+" (select type from sys_role, sys_user_role where sys_user_role.role_id = sys_role.id and sys_user_role.user_id="
+ InterfaceUtil.getAdminId() + " AND sys_user_role.is_deleted=0 ) and tsr.is_deleted=0 ";
StringBuffer sql=new StringBuffer(sqlExceptSelect);
for(Map.Entry<String, String> item : searchInfo.entrySet()){
sql.append(buildQuery(item));
}
sql.append("order by tsr.created_time desc");
return sql.toString();
}
private String buildQuery(Map.Entry<String, String> item){
String sql = "";
if(item.getKey().equals("name")){
sql += " and tsr.name like '%" + item.getValue() + "%' ";
}
return sql;
}
}

View File

@ -0,0 +1,100 @@
package cn.palmte.work.model;
import javax.persistence.*;
import java.util.Date;
@Entity
@Table(name = "sys_user_role")
public class SysUserRole {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "user_id")
private int userId;
@Column(name = "role_id")
private int roleId;
@Column(name = "is_deleted")
private int isDeleted;
@Column(name = "created_by")
private int createdBy;
@Column(name = "created_time")
private Date createdTime;
@Column(name = "last_updated_by")
private int lastUpdatedBy;
@Column(name = "last_updated_time")
private Date lastUpdatedTime;
public SysUserRole() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
public int getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(int isDeleted) {
this.isDeleted = isDeleted;
}
public int getCreatedBy() {
return createdBy;
}
public void setCreatedBy(int createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public int getLastUpdatedBy() {
return lastUpdatedBy;
}
public void setLastUpdatedBy(int lastUpdatedBy) {
this.lastUpdatedBy = lastUpdatedBy;
}
public Date getLastUpdatedTime() {
return lastUpdatedTime;
}
public void setLastUpdatedTime(Date lastUpdatedTime) {
this.lastUpdatedTime = lastUpdatedTime;
}
}

View File

@ -0,0 +1,26 @@
package cn.palmte.work.model;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import javax.transaction.Transactional;
import java.util.Date;
import java.util.List;
public interface SysUserRoleRepository extends JpaRepository<SysUserRole, Integer> {
/**
* userID id
*/
@Query(" select userId from SysUserRole where roleId=?1 and isDeleted=0 ")
public List<SysUserRole> findRoleByRoleId(int role_id);
@Transactional
@Query("update SysUserRole sysUserRole set isDeleted = 1,lastUpdatedBy=?1,lastUpdatedTime=?2 where userId=?3 ")
@Modifying
int deleteSysUserRoleByUserId(int createAdminId, Date date, int userId);
}

View File

@ -0,0 +1,26 @@
package cn.palmte.work.pojo;
import java.io.Serializable;
public class AlarmDetailDto implements Serializable {
private int alarmDetailId;
private String pushConfigId;
public int getAlarmDetailId() {
return alarmDetailId;
}
public void setAlarmDetailId(int alarmDetailId) {
this.alarmDetailId = alarmDetailId;
}
public String getPushConfigId() {
return pushConfigId;
}
public void setPushConfigId(String pushConfigId) {
this.pushConfigId = pushConfigId;
}
}

View File

@ -0,0 +1,43 @@
package cn.palmte.work.pojo;
import java.io.Serializable;
import java.util.List;
public class AlarmDetailReportDto implements Serializable {
/**
*
*/
private String constructionSiteName;
/**
*
*/
private List<Integer> alarmCount;
private int allCount;
public int getAllCount() {
return allCount;
}
public void setAllCount(int allCount) {
this.allCount = allCount;
}
public String getConstructionSiteName() {
return constructionSiteName;
}
public void setConstructionSiteName(String constructionSiteName) {
this.constructionSiteName = constructionSiteName;
}
public List<Integer> getAlarmCount() {
return alarmCount;
}
public void setAlarmCount(List<Integer> alarmCount) {
this.alarmCount = alarmCount;
}
}

View File

@ -0,0 +1,34 @@
package cn.palmte.work.pojo;
public class AlarmDetailReportExcel {
private String constructionSiteName;
private String alarmTypeName;
private int alarmCount;
public String getConstructionSiteName() {
return constructionSiteName;
}
public void setConstructionSiteName(String constructionSiteName) {
this.constructionSiteName = constructionSiteName;
}
public String getAlarmTypeName() {
return alarmTypeName;
}
public void setAlarmTypeName(String alarmTypeName) {
this.alarmTypeName = alarmTypeName;
}
public int getAlarmCount() {
return alarmCount;
}
public void setAlarmCount(int alarmCount) {
this.alarmCount = alarmCount;
}
}

View File

@ -0,0 +1,21 @@
package cn.palmte.work.pojo;
/**
* Created by wang.lin@esstx.cn on 2018/7/17.
*/
public class AliSmsTemplate {
private String code;
public String getCode() {
return code;
}
public AliSmsTemplate(String code) {
this.code = code;
}
public void setCode(String code) {
this.code = code;
}
}

View File

@ -0,0 +1,49 @@
package cn.palmte.work.pojo;
public class AllocationPermissionDto {
//已分配
public static final int ALLOCATION = 0;
//未分配
public static final int NOT_ALLOCATION = 1;
private int permissionId;
private String permissionName;
private String perminssionCode;
private int isAllocation;
public int getPermissionId() {
return permissionId;
}
public void setPermissionId(int permissionId) {
this.permissionId = permissionId;
}
public String getPermissionName() {
return permissionName;
}
public void setPermissionName(String permissionName) {
this.permissionName = permissionName;
}
public String getPerminssionCode() {
return perminssionCode;
}
public void setPerminssionCode(String perminssionCode) {
this.perminssionCode = perminssionCode;
}
public int getIsAllocation() {
return isAllocation;
}
public void setIsAllocation(int isAllocation) {
this.isAllocation = isAllocation;
}
}

View File

@ -0,0 +1,26 @@
package cn.palmte.work.pojo;
import java.io.Serializable;
public class BindingDto implements Serializable {
private int appManagerId;
private String ids;
public int getAppManagerId() {
return appManagerId;
}
public void setAppManagerId(int appManagerId) {
this.appManagerId = appManagerId;
}
public String getIds() {
return ids;
}
public void setIds(String ids) {
this.ids = ids;
}
}

View File

@ -0,0 +1,249 @@
package cn.palmte.work.pojo;
import java.io.Serializable;
import java.util.Date;
public class ConstructionSiteDto implements Serializable {
private Integer id;
private String projectName;
private String projectAddress;
private int regionId;
private String regionName;
private String areaCode;
private String areaName;
private String location;
private String buildCompany;
private String constructionCompany;
private String coveredArea;
private String startDate;
private String endDate;
private String principalName;
private String principalPhone;
private String serverAddress;
private int isDeleted;
private int createdBy;
private Date createdTime;
private int lastUpdatedBy;
private Date lastUpdatedTime;
private String siteCode;
//经度
private String longitude;
//纬度
private String latitude;
public String getLongitude() {
return longitude;
}
public void setLongitude(String longitude) {
this.longitude = longitude;
}
public String getLatitude() {
return latitude;
}
public void setLatitude(String latitude) {
this.latitude = latitude;
}
public String getSiteCode() {
return siteCode;
}
public void setSiteCode(String siteCode) {
this.siteCode = siteCode;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getProjectAddress() {
return projectAddress;
}
public void setProjectAddress(String projectAddress) {
this.projectAddress = projectAddress;
}
public int getRegionId() {
return regionId;
}
public void setRegionId(int regionId) {
this.regionId = regionId;
}
public String getRegionName() {
return regionName;
}
public void setRegionName(String regionName) {
this.regionName = regionName;
}
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public String getAreaName() {
return areaName;
}
public void setAreaName(String areaName) {
this.areaName = areaName;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getBuildCompany() {
return buildCompany;
}
public void setBuildCompany(String buildCompany) {
this.buildCompany = buildCompany;
}
public String getConstructionCompany() {
return constructionCompany;
}
public void setConstructionCompany(String constructionCompany) {
this.constructionCompany = constructionCompany;
}
public String getCoveredArea() {
return coveredArea;
}
public void setCoveredArea(String coveredArea) {
this.coveredArea = coveredArea;
}
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public String getPrincipalName() {
return principalName;
}
public void setPrincipalName(String principalName) {
this.principalName = principalName;
}
public String getPrincipalPhone() {
return principalPhone;
}
public void setPrincipalPhone(String principalPhone) {
this.principalPhone = principalPhone;
}
public String getServerAddress() {
return serverAddress;
}
public void setServerAddress(String serverAddress) {
this.serverAddress = serverAddress;
}
public int getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(int isDeleted) {
this.isDeleted = isDeleted;
}
public int getCreatedBy() {
return createdBy;
}
public void setCreatedBy(int createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public int getLastUpdatedBy() {
return lastUpdatedBy;
}
public void setLastUpdatedBy(int lastUpdatedBy) {
this.lastUpdatedBy = lastUpdatedBy;
}
public Date getLastUpdatedTime() {
return lastUpdatedTime;
}
public void setLastUpdatedTime(Date lastUpdatedTime) {
this.lastUpdatedTime = lastUpdatedTime;
}
}

View File

@ -0,0 +1,104 @@
package cn.palmte.work.pojo;
public class ForecastData {
private String aqi;
private String forecastTime;
private String primaryPollutant;
private String temp;
private String weather;
private String windLevel;
private String day;
private String week;
private String aqiLevel;
private String aqiRange;
public String getAqiRange() {
return aqiRange;
}
public void setAqiRange(String aqiRange) {
this.aqiRange = aqiRange;
}
public String getAqiLevel() {
return aqiLevel;
}
public void setAqiLevel(String aqiLevel) {
this.aqiLevel = aqiLevel;
}
public String getDay() {
return day;
}
public void setDay(String day) {
this.day = day;
}
public String getWeek() {
return week;
}
public void setWeek(String week) {
this.week = week;
}
public String getAqi() {
return aqi;
}
public void setAqi(String aqi) {
this.aqi = aqi;
}
public String getForecastTime() {
return forecastTime;
}
public void setForecastTime(String forecastTime) {
this.forecastTime = forecastTime;
}
public String getPrimaryPollutant() {
return primaryPollutant;
}
public void setPrimaryPollutant(String primaryPollutant) {
this.primaryPollutant = primaryPollutant;
}
public String getTemp() {
return temp;
}
public void setTemp(String temp) {
this.temp = temp;
}
public String getWeather() {
return weather;
}
public void setWeather(String weather) {
this.weather = weather;
}
public String getWindLevel() {
return windLevel;
}
public void setWindLevel(String windLevel) {
this.windLevel = windLevel;
}
}

View File

@ -0,0 +1,43 @@
package cn.palmte.work.pojo;
/**
* Created by tracy on 2018/4/16.
*/
public class LoginRequest {
private String userName;
private String password;
private String captchaToken;
private boolean showIndexData=false;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCaptchaToken() {
return captchaToken;
}
public void setCaptchaToken(String captchaToken) {
this.captchaToken = captchaToken;
}
public boolean isShowIndexData() {
return showIndexData;
}
public void setShowIndexData(boolean showIndexData) {
this.showIndexData = showIndexData;
}
}

View File

@ -0,0 +1,38 @@
package cn.palmte.work.pojo;
import java.util.List;
/**
* Created by tracy on 2018/4/16.
*/
public class LoginResponse {
private String userName;
private List<Menu> topMenuList;
private List<Menu> sideBarList;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public List<Menu> getTopMenuList() {
return topMenuList;
}
public void setTopMenuList(List<Menu> topMenuList) {
this.topMenuList = topMenuList;
}
public List<Menu> getSideBarList() {
return sideBarList;
}
public void setSideBarList(List<Menu> sideBarList) {
this.sideBarList = sideBarList;
}
}

View File

@ -0,0 +1,82 @@
package cn.palmte.work.pojo;
import java.util.List;
/**
* Created by tracy on 2018/4/16.
*/
public class Menu {
private int id;
private String name;
private String remark;
private String icon;
private String url;
private int parentId;
private String permossion;
private List<Menu> children;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public List<Menu> getChildren() {
return children;
}
public void setChildren(List<Menu> children) {
this.children = children;
}
public int getParentId() {
return parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
}
public String getPermossion() {
return permossion;
}
public void setPermossion(String permossion) {
this.permossion = permossion;
}
}

View File

@ -0,0 +1,34 @@
package cn.palmte.work.pojo;
/**
* Created by wang.lin@esstx.cn on 2018/4/25.
*/
public class ModifyPasswordRequest {
private String id;
private String password;
private String newPassword;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNewPassword() {
return newPassword;
}
public void setNewPassword(String newPassword) {
this.newPassword = newPassword;
}
}

View File

@ -0,0 +1,104 @@
package cn.palmte.work.pojo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
public class PermissionNode {
private static final Logger logger = LoggerFactory.getLogger(PermissionNode.class);
private int id; //id
private int parentId; // 父id
private int level;// 层级
private String name;//名称
private boolean hasLeafNode = false; // 是否有叶子子代
private boolean isLeafNode = false; //是否是叶子节点
private boolean selected = false; // 是否已选中
private List<PermissionNode> subNodes; // 子代集合
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public boolean isLeafNode(){
return isLeafNode;
}
public void setLeafNode(boolean isLeafNode){
this.isLeafNode = isLeafNode;
}
public List<PermissionNode> getSubNodes(){
return subNodes;
}
public void addSubNode(PermissionNode node){
if(subNodes == null){
subNodes = new ArrayList<PermissionNode>();
}
if(node.isLeafNode){
hasLeafNode = true;
}
subNodes.add(node);
}
public int getParentId(){
return parentId;
}
public void setParentId(int parentId){
this.parentId = parentId;
}
public void setSubNodes(List<PermissionNode> subNodes){
this.subNodes = subNodes;
}
public boolean isHasLeafNode(){
return hasLeafNode;
}
public void setHasLeafNode(boolean hasLeafNode){
this.hasLeafNode = hasLeafNode;
}
public int getLevel(){
return level;
}
public void setLevel(int level){
this.level = level;
}
public boolean isSelected(){
return selected;
}
public void setSelected(boolean selected){
this.selected = selected;
}
@Override
public String toString(){
return name + "[" + id + ",pId:" + parentId + ",checked:" + selected + ",hasLeafNode:" + hasLeafNode + "]";
}
}

View File

@ -0,0 +1,84 @@
package cn.palmte.work.pojo;
import cn.palmte.work.model.SysPermission;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class PermissionTree {
private static final Logger logger = LoggerFactory.getLogger(PermissionTree.class);
private static final int LEAF_NODE = 2;
public static PermissionNode parsePermsNodeTree(List<SysPermission> permList, List<Integer> selectedPermIdList){
PermissionNode root = new PermissionNode();
for(int i = 0; i < permList.size(); i++){
SysPermission perms = permList.get(i);
PermissionNode subNode = getPermNode(perms);
if(selectedPermIdList.contains(subNode.getId())){
//设置该节点已被选择
subNode.setSelected(true);
}
// 如果父id为0则该节点为主节点
if(subNode.getParentId() == 0){
root = subNode;
} else{
PermissionNode node = findParentNode(root, subNode.getParentId());
if(node != null){
node.addSubNode(subNode);
}
}
}
return root;
}
private static PermissionNode getPermNode(SysPermission perms){
PermissionNode subNode = new PermissionNode();
subNode.setId(perms.getId());
subNode.setName(perms.getName());
subNode.setParentId(perms.getParentId());
subNode.setLevel(perms.getLevel());
Integer type = perms.getType();
if(LEAF_NODE == type){
//设置为叶子节点
subNode.setLeafNode(true);
} else{
subNode.setLeafNode(false);
}
return subNode;
}
private static PermissionNode findParentNode(PermissionNode node, int nodeId){
if(node == null){
return null;
}
if(node.getId() == nodeId){
return node;
}
if(node.getSubNodes() == null){
return null;
}
for(PermissionNode subNode : node.getSubNodes()){
PermissionNode parentNode = findParentNode(subNode, nodeId);
if(parentNode != null){
return parentNode;
}
}
return null;
}
}

View File

@ -0,0 +1,26 @@
package cn.palmte.work.pojo;
import java.util.List;
public class ReportTable {
private List<String> thead;
private List<AlarmDetailReportDto> tbody;
public List<String> getThead() {
return thead;
}
public void setThead(List<String> thead) {
this.thead = thead;
}
public List<AlarmDetailReportDto> getTbody() {
return tbody;
}
public void setTbody(List<AlarmDetailReportDto> tbody) {
this.tbody = tbody;
}
}

View File

@ -0,0 +1,41 @@
package cn.palmte.work.pojo;
import java.io.Serializable;
public class RoleBean implements Serializable{
private String name;
private int value;
private boolean selected;
public String getName(){
return name;
}
public RoleBean(String name, int value){
super();
this.name = name;
this.value = value;
}
public void setName(String name){
this.name = name;
}
public int getValue(){
return value;
}
public void setValue(int value){
this.value = value;
}
public boolean isSelected(){
return selected;
}
public void setSelected(boolean selected){
this.selected = selected;
}
}

View File

@ -0,0 +1,37 @@
package cn.palmte.work.pojo;
import java.util.List;
import java.util.Map;
public class StationAirDataDto {
String aqi;
String updateTime;
List<Map<String, Object>> airData;
public String getAqi() {
return aqi;
}
public void setAqi(String aqi) {
this.aqi = aqi;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public List<Map<String, Object>> getAirData() {
return airData;
}
public void setAirData(List<Map<String, Object>> airData) {
this.airData = airData;
}
}

View File

@ -0,0 +1,36 @@
package cn.palmte.work.pojo;
import java.util.List;
public class StatisticsDto {
private List<String> titles;
private List<String> dateStr;
private List<StatisticsItem> seriesData;
public List<String> getDateStr() {
return dateStr;
}
public void setDateStr(List<String> dateStr) {
this.dateStr = dateStr;
}
public List<StatisticsItem> getSeriesData() {
return seriesData;
}
public void setSeriesData(List<StatisticsItem> seriesData) {
this.seriesData = seriesData;
}
public List<String> getTitles() {
return titles;
}
public void setTitles(List<String> titles) {
this.titles = titles;
}
}

View File

@ -0,0 +1,43 @@
package cn.palmte.work.pojo;
import java.util.List;
public class StatisticsItem {
private String name;
private String type;
private String stack;
private List<Long> data;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getStack() {
return stack;
}
public void setStack(String stack) {
this.stack = stack;
}
public List<Long> getData() {
return data;
}
public void setData(List<Long> data) {
this.data = data;
}
}

View File

@ -0,0 +1,77 @@
package cn.palmte.work.pojo;
/**
*
*
* @author pengqiang
* @date 2018/5/3
*/
public class UploadResult {
private String originName;
private String name;
private String newName;
private int status;
private String url;
private String msg;
public UploadResult() {
}
public UploadResult(int status) {
this.status = status;
}
public UploadResult(int status, String msg) {
this.status = status;
this.msg = msg;
}
public String getOriginName() {
return originName;
}
public void setOriginName(String originName) {
this.originName = originName;
}
public String getNewName() {
return newName;
}
public void setNewName(String newName) {
this.newName = newName;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

View File

@ -0,0 +1,35 @@
package cn.palmte.work.security;
import top.jfunc.common.utils.ArrayUtil;
import top.jfunc.common.utils.StrUtil;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* URL
*/
public class ReplaceSpecialCharFilter implements Filter {
private String[] includes;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String requestURI = httpServletRequest.getRequestURI();
if(ArrayUtil.contains(includes, requestURI)) {
httpServletRequest = new XssHttpServletRequestWrapper(httpServletRequest);
}
filterChain.doFilter(httpServletRequest, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
String includes = filterConfig.getInitParameter("includes");
this.includes = StrUtil.isEmpty(includes)?new String[0]:includes.split(",");
}
@Override
public void destroy() {}
}

View File

@ -0,0 +1,28 @@
package cn.palmte.work.security;
import top.jfunc.common.utils.StrUtil;
/**
*
* https://blog.csdn.net/conkeyn/article/details/84532040
* @author xiongshiyan at 2021/9/6 , contact me with email yanshixiong@126.com or phone 15208384257
*/
public class UrlUtil {
private static final String REG_EX="[\n`~!@#$%^&*\\(\\)+|;{}',\\\\\\[\\]<>/?~@#¥%……&*()——+|{}【】‘;:”“’。, 、?]";
public static String replaceSpecialChar(String origin){
if(StrUtil.isEmpty(origin)){
return origin;
}
String s = origin.replaceAll(REG_EX, "");
//双引号不好写在正则中
return s.replace("\"", "");
}
public static void main(String[] args) {
String origin = "12|&;$%@'\"<>()+,\\";
System.out.println(origin);
String s = replaceSpecialChar(origin);
System.out.println(s);
}
}

View File

@ -0,0 +1,50 @@
package cn.palmte.work.security;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
HttpServletRequest originRequest = null;
public XssHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
originRequest = request;
}
/**
* getParameterxss<br/>
* super.getParameterValues(name)<br/>
* getParameterNames,getParameterValuesgetParameterMap
*/
@Override
public String getParameter(String name) {
String parameter = super.getParameter(name);
return UrlUtil.replaceSpecialChar(parameter);
}
@Override
public String[] getParameterValues(String name) {
String[] arr = super.getParameterValues(name);
if(arr != null){
for (int i=0;i<arr.length;i++) {
arr[i] = UrlUtil.replaceSpecialChar(arr[i]);
}
}
return arr;
}
@Override
public String getHeader(String name) {
String value = super.getHeader(name);
return UrlUtil.replaceSpecialChar(value);
}
/**
* request
*/
public HttpServletRequest getOriginRequest() {
return originRequest;
}
}

View File

@ -0,0 +1,234 @@
package cn.palmte.work.service;
import cn.palmte.work.bean.RegexConstant;
import cn.palmte.work.model.*;
import cn.palmte.work.utils.DESCrypto;
import cn.palmte.work.utils.InterfaceUtil;
import cn.palmte.work.utils.StrKit;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import top.jfunc.common.db.QueryHelper;
import top.jfunc.common.db.bean.Page;
import top.jfunc.common.db.utils.Pagination;
import java.beans.Transient;
import java.util.Date;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by wang.lin@esstx.cn on 2018/4/20.
*/
@Service
public class AccountService {
private static final Logger logger = LoggerFactory.getLogger(AccountService.class);
@Autowired
public AdminRepository adminRepository;
@Autowired
public AdminRepositoryImpl adminRepositoryImpl;
@Autowired
public SysUserRoleRepository sysUserRoleRepository;
@Autowired
Pagination pagination;
@Autowired
private SysRoleRepository sysRoleRepository;
public Page getAdminList(ConcurrentHashMap<String, String> searchInfo, int pageSize, int pageNum) {
return adminRepositoryImpl.getAdminList(searchInfo, pageSize, pageNum);
}
public Page<Admin> list(ConcurrentHashMap<String, String> searchInfo, int pageNumber, int pageSize) {
QueryHelper queryHelper = new QueryHelper("select su.id,su.user_name,su.real_name,su.created_time,su.enabled,sr.type,sr.name as roleName,su.telephone,su.region_name", " FROM sys_user su left join sys_user_role " +
"sur on su.id = sur.user_id left join sys_role sr on sur.role_id = sr.id");
queryHelper.addCondition("su.is_deleted = 0");
queryHelper.addCondition(searchInfo.containsKey("roleId") &&
StrKit.notBlank(searchInfo.get("roleId")) && !"-1".equals(searchInfo.get("roleId")),
"sr.id =?", searchInfo.get("roleId"));
queryHelper.addCondition(searchInfo.containsKey("userName"), "su.user_name like ?", "%" +
"su.is_deleted = 0" + "%");
queryHelper.addCondition(searchInfo.containsKey("telephone"), "su.telephone = ?" + searchInfo.get("telephone"));
queryHelper.addCondition(searchInfo.containsKey("regionId") &&
StrKit.notBlank(searchInfo.get("regionId")) && !"-1".equals(searchInfo.get("regionId")),
"su.region_id =?", searchInfo.get("regionId"));
queryHelper.addOrderProperty("su.created_time", false);
Page<Admin> page = pagination.paginate(queryHelper.getSql(), Admin.class, pageNumber, pageSize);
return page;
}
@Transient
public boolean changeStatus(int userId, int enabled) {
Admin admin = adminRepository.findOne(userId);
if (admin == null) {
return false;
}
admin.setEnabled(enabled);
adminRepository.save(admin);
return true;
}
public Admin findUserById(int userId) {
Admin admin = adminRepositoryImpl.findAdminById(userId);
SysRole sysRole = sysRoleRepository.findOne(admin.getRoleId());
if(null != sysRole){
admin.setRoleName(sysRole.getName());
}
return admin;
}
@Transactional(rollbackFor = Exception.class)
public void saveOrUpdateAccount(int userId, int roleId, Admin admin, String privateKey) {
int createAdminId = InterfaceUtil.getAdminId();
Admin oldAdmin = adminRepository.findOne(userId);
if (oldAdmin == null) {
oldAdmin = new Admin();
String userName = admin.getUserName();
oldAdmin.setUserName(userName);
String salt = RandomStringUtils.randomAlphanumeric(6).toUpperCase();
String newPassword = decEncPassword(admin.getTelephone().substring(5), salt, privateKey);
oldAdmin.setPassword(newPassword);
oldAdmin.setSalt(salt);
oldAdmin.setEnabled(1);
oldAdmin.setRealName(admin.getRealName());
oldAdmin.setCreatedBy(createAdminId);
oldAdmin.setTelephone(admin.getTelephone());
oldAdmin.setCreatedTime(new Date());
} else {
String userName = admin.getUserName();
oldAdmin.setUserName(userName);
oldAdmin.setRealName(admin.getRealName());
oldAdmin.setTelephone(admin.getTelephone());
oldAdmin.setLastUpdatedBy(createAdminId);
oldAdmin.setLastUpdatedTime(new Date());
}
oldAdmin.setRegionId(admin.getRegionId());
oldAdmin.setRoleId(admin.getRoleId());
SysRole one = sysRoleRepository.findOne(admin.getRoleId());
if (null != one) {
oldAdmin.setRoleName(one.getName());
}
admin = adminRepository.saveAndFlush(oldAdmin);
//设置当前用户角色关系状态为删除
userId = admin.getId();
sysUserRoleRepository.deleteSysUserRoleByUserId(createAdminId, new Date(), userId);
SysUserRole sysUserRole = new SysUserRole();
//保存用户角色关系
sysUserRole.setUserId(userId);
sysUserRole.setRoleId(roleId);
sysUserRole.setCreatedBy(createAdminId);
sysUserRole.setCreatedTime(new Date());
sysUserRoleRepository.save(sysUserRole);
}
/**
*
*/
public String validateUserExistInfo(int userId, Admin admin) {
String message = "";
//校验手机号格式
String phone = admin.getTelephone();
if (!phone.matches(RegexConstant.REGEX)) {
return "请填写正确的电话号码!";
}
Admin byTelephoneEquals = adminRepository.findByTelephone(phone);
if (userId == -1) {
//新增校验手机号是否存在
if (null != byTelephoneEquals) {
message = "该手机号已存在!";
return message;
}
} else {
//编辑校验手机号是否存在
if (null != byTelephoneEquals && byTelephoneEquals.getId() != userId) {
message = "该手机号已存在!";
return message;
}
}
if (StringUtils.isEmpty(admin.getUserName())) {
message = "亲,用户名不能为空!";
return message;
}
Admin existAdmin = adminRepository.getAdminByUsername(admin.getUserName());
if (userId == -1) {//只在新增时候校验
if (existAdmin != null) {
message = "亲,该账号已存在!";
return message;
}
} else {
if (existAdmin != null && existAdmin.getId() != userId) {
message = "亲,该账号名称已存在!";
return message;
}
}
existAdmin = adminRepository.getAdminByRealName(admin.getRealName());
if (existAdmin != null && existAdmin.getId() != userId) {
message = "亲,该账号名称已存在!";
return message;
}
return message;
}
public String decEncPassword(String password, String salt, String privateKey) {
try {
return DESCrypto.encryptPassword(password, salt);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
public boolean resetPassword(int userId, String privateKey) {
try {
Admin oldAdmin = adminRepository.findOne(userId);
if (oldAdmin == null) {
return false;
}
String salt = RandomStringUtils.randomAlphanumeric(6).toUpperCase();
String telephone = oldAdmin.getTelephone();
String newPassword = decEncPassword(telephone.substring(5), salt, privateKey);
oldAdmin.setPassword(newPassword);
oldAdmin.setSalt(salt);
oldAdmin.setLastUpdatedBy(InterfaceUtil.getAdminId());
oldAdmin.setLastUpdatedTime(new Date());
adminRepository.save(oldAdmin);
} catch (Exception e) {
logger.error("充值密码错误!" + e.toString());
return false;
}
return true;
}
@Transactional(rollbackFor = Exception.class)
public boolean deleteAccount(int userId) {
try {
Admin admin = adminRepository.findOne(userId);
admin.setDeleted(true);
admin.setLastUpdatedBy(InterfaceUtil.getAdminId());
//删除用户角色关系
sysUserRoleRepository.deleteSysUserRoleByUserId(InterfaceUtil.getAdminId(), new Date(), userId);
adminRepository.save(admin);
return true;
} catch (Exception e) {
logger.error("账户ID:" + userId + "删除错误!" + e.toString());
}
return false;
}
}

View File

@ -0,0 +1,234 @@
package cn.palmte.work.service;
import cn.palmte.work.model.*;
import cn.palmte.work.pojo.LoginResponse;
import cn.palmte.work.pojo.Menu;
import cn.palmte.work.shiro.ShiroUtils;
import cn.palmte.work.utils.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
/**
* @author: zhangming
* @date: 2019/9/18 0018
*/
@Service
public class AdminService {
private static final Pattern PSW_PATTERN = Pattern.compile("^[\\@A-Za-z0-9\\!\\#\\$\\%\\^\\&\\*\\.\\~]{8,20}$");
@Autowired
public AdminRepositoryCustom adminRepositoryCustom;
@Autowired
public AdminRepositoryImpl adminRepositoryImpl;
@Autowired
public AdminRepository adminRepository;
@Autowired
public SysPermissionRepository sysPermissionRepository;
public Admin getAdminByUsername(String userName) {
List<Admin> admins = adminRepository.getAdminByUsernameListNoEnabled(userName);
if (admins != null && !admins.isEmpty()) {
Admin admin = admins.get(0);
//查询角色ID和TYPE
Admin adminRoleInfo = adminRepositoryImpl.findAdminByUserName(userName);
admin.setRoleType(adminRoleInfo.getRoleType());
admin.setRoleId(adminRoleInfo.getRoleId());
admin.setRoleLevel(adminRoleInfo.getRoleLevel());
return admin;
}
return null;
}
public List<String> getAuthoritiesName(String adminId) {
return adminRepositoryCustom.getAuthoritiesName(adminId);
}
public List<String> getAuthoritieUrls(String adminId) {
return adminRepositoryCustom.getAuthoritieUrls(adminId);
}
public List<SysPermission> getAuthoritieUrlsByParentPermission(String adminId, String permission) {
return adminRepositoryCustom.getAuthoritieUrlsByParentPermission(adminId, permission);
}
public List<String> getRolesName(String adminId) {
return adminRepositoryCustom.getRolesName(adminId);
}
public LoginResponse initMenuList(int uId) {
LoginResponse loginResponse = new LoginResponse();
List<Menu> topMenuList = getMenuByLevelID(2);
loginResponse.setTopMenuList(topMenuList);
List<Menu> menuList = new ArrayList<>();
if (uId > 0) {
menuList = getMenuByParentId(uId);
} else {
if (null != topMenuList && topMenuList.size() > 0) {
Integer topMenuId = topMenuList.get(0).getId();
menuList = getMenuByParentId(topMenuId);
}
}
loginResponse.setSideBarList(menuList);
return loginResponse;
}
public List<Menu> getMenuByLevelID(int levelId) {
List<SysPermission> list = sysPermissionRepository.findSysPermissionByLevel(levelId);
List<Menu> nodeList = new ArrayList<>();
for (SysPermission sysPermission : list) {
//TODO:需补充shiro权限相关逻辑
if (ShiroUtils.hasPermission(sysPermission.getPermission())) {
// remark字段用于返回前端TOP菜单css样式的class ID
String url[] = sysPermission.getUrl().split("/");
sysPermission.setRemark(url[url.length - 1]);
Menu menu = new Menu();
menu.setId(sysPermission.getId());
menu.setName(sysPermission.getName());
menu.setIcon(sysPermission.getIcon());
menu.setRemark(sysPermission.getRemark());
menu.setUrl(sysPermission.getUrl());
menu.setIcon(sysPermission.getIcon());
menu.setParentId(sysPermission.getParentId());
menu.setPermossion(sysPermission.getPermission());
nodeList.add(menu);
}
}
return nodeList;
}
public List<Menu> getMenuByParentId(int parentId) {
List<Menu> nodeList = new ArrayList<>();
List<Menu> returnList = new ArrayList<>();
List<SysPermission> list = sysPermissionRepository.findSysPermissionByParentId(parentId);
list.forEach(sysPermission -> {
Menu menu = new Menu();
menu.setId(sysPermission.getId());
menu.setName(sysPermission.getName());
menu.setIcon(sysPermission.getIcon());
menu.setRemark(sysPermission.getRemark());
menu.setUrl(sysPermission.getUrl());
menu.setIcon(sysPermission.getIcon());
menu.setParentId(sysPermission.getParentId());
menu.setPermossion(sysPermission.getPermission());
nodeList.add(menu);
});
for (Menu node1 : nodeList) {
boolean mark = false;
for (Menu node2 : nodeList) {
if (node1.getParentId() > 0L && node1.getParentId() == node2.getId()) {
mark = true;
if (node2.getChildren() == null) {
node2.setChildren(new ArrayList<Menu>());
}
//TODO:需补充shiro权限相关逻辑
if (ShiroUtils.hasPermission(node1.getPermossion())) {
node2.getChildren().add(node1);
}
break;
}
}
//TODO:需补充shiro权限相关逻辑
if (!mark && ShiroUtils.hasPermission(node1.getPermossion())) {
returnList.add(node1);
}
}
return returnList;
}
/**
*
*/
public void updateLoginInfo(Admin admin, HttpServletRequest request) {
admin.setLoginDate(new Date());
admin.setLoginIp(request.getRemoteAddr());
admin.setLoginErrorCount(0);
admin.setLocked(Admin.UN_LOCKED);
admin.setLockedDate(null);
adminRepository.save(admin);
}
public SysRole getRole(String adminId) {
return adminRepositoryCustom.getRole(adminId);
}
/**
* idadmin
*/
public Admin getAdminById(int id) {
return adminRepository.getAdminById(id);
}
public void updatePassword(String id, String password, String newPassword, String privateKey) {
int adminId = InterfaceUtil.getAdminId();
if(adminId != Integer.parseInt(id)){
throw new RuntimeException("密码修改失败id不合法");
}
Admin admin = adminRepository.findOne(Integer.valueOf(id));
if(null == admin){
throw new RuntimeException("密码修改失败,不存在 id = " + id + " 这个人");
}
String salt = admin.getSalt();
String desOldPwd = "";
String desNewPwd = "";
try{
/* RSA 解密 */
String oldPwdByRSA = StrKit.byteToStringWithDefaultEncoding(RSAUtils.decryptByPrivateKey(Base64Utils.decode(password), privateKey));
desOldPwd = DESCrypto.encryptPassword(oldPwdByRSA, salt);
String newPwdByRSA = StrKit.byteToStringWithDefaultEncoding(RSAUtils.decryptByPrivateKey(Base64Utils.decode(newPassword), privateKey));
if(!PSW_PATTERN.matcher(newPwdByRSA).matches()){// 密码不满足正则表达式
throw new RuntimeException("密码修改失败密码不满足规则8-20位非中文字符");
}
desNewPwd = DESCrypto.encryptPassword(newPwdByRSA, salt);
}
catch(Exception e){
throw new RuntimeException("密码修改失败");
}
String correct = admin.getPassword();
if(!desOldPwd.equals(correct)){
throw new RuntimeException("密码修改失败,原密码错误");
}
admin.setPassword(desNewPwd);
admin.setLastUpdatedBy(InterfaceUtil.getAdminId());
admin.setLastUpdatedTime(new Date());
admin.setUpdatedPasswordTime(new Date());
adminRepository.save(admin);
}
public boolean isLocked(Admin admin){
if(admin.getLocked()==Admin.UN_LOCKED){
return false;
}
Date lockedDate = admin.getLockedDate();
//15分钟之后就不算锁定了
return System.currentTimeMillis() - lockedDate.getTime() <= 15 * 60 * 1000;
}
public void addLoginError(Admin admin){
int loginErrorCount = admin.getLoginErrorCount();
admin.setLoginErrorCount(loginErrorCount+1);
//5次就锁定
if(loginErrorCount >= 5-1){
admin.setLocked(Admin.LOCKED);
admin.setLockedDate(new Date());
}
adminRepository.saveAndFlush(admin);
}
}

View File

@ -0,0 +1,25 @@
package cn.palmte.work.service;
import cn.palmte.work.model.ExcelEvent;
import cn.palmte.work.model.ExportExcelBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
/**
* @author ZM
* @date 2018/9/21
*/
@Service
public class ExcelEventService {
@Autowired
ApplicationContext applicationContext;
/**
* excel
*/
public void exportExcel(ExportExcelBean exportExcelBean){
//发布异步导出excel事件
applicationContext.publishEvent(new ExcelEvent(this,exportExcelBean));
}
}

View File

@ -0,0 +1,26 @@
package cn.palmte.work.service;
import cn.palmte.work.model.LoginLog;
import cn.palmte.work.model.LoginLogRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* @author xiongshiyan at 2021/8/24 , contact me with email yanshixiong@126.com or phone 15208384257
*/
@Service
public class LoginLogService {
@Autowired
private LoginLogRepository loginLogRepository;
public void saveLog(String userName, int status, String statusDesc){
LoginLog loginLog = new LoginLog();
loginLog.setName(userName);
loginLog.setStatus(status);
loginLog.setStatusDesc(statusDesc);
loginLog.setCreateTime(new Date());
loginLogRepository.saveAndFlush(loginLog);
}
}

View File

@ -0,0 +1,102 @@
package cn.palmte.work.service;
import cn.palmte.work.model.SlideCaptcha;
import cn.palmte.work.model.SlideCaptchaRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import top.jfunc.common.utils.StrUtil;
import java.util.Date;
/**
* @author xiongshiyan at 2020/9/30 , contact me with email yanshixiong@126.com or phone 15208384257
*/
@Service
public class SlideCaptchaService {
private static final Logger logger = LoggerFactory.getLogger(SlideCaptchaService.class);
@Autowired
private SlideCaptchaRepository slideCaptchaRepository;
@Value("${fourcal.slideInterval:1800000}")
private long slideInterval;
/**
* @param serialNumber
*/
public boolean updateCaptcha(String serialNumber, String identifier, int x, int y){
if(StrUtil.isEmpty(serialNumber) || StrUtil.isEmpty(identifier)){
return false;
}
SlideCaptcha slideCaptcha = slideCaptchaRepository.findFirstBySerialNumberEquals(serialNumber);
if(null == slideCaptcha){
slideCaptcha = new SlideCaptcha();
slideCaptcha.setSerialNumber(serialNumber);
slideCaptcha.setStatus(SlideCaptcha.STATUS_INIT);
}
slideCaptcha.setX(x);
slideCaptcha.setY(y);
slideCaptcha.setIdentifier(identifier);
slideCaptcha.setModifyTime(new Date());
slideCaptchaRepository.saveAndFlush(slideCaptcha);
return true;
}
/**
* @param serialNumber
*/
public boolean verifyCaptcha(String serialNumber, String identifier, int x, int y, int allowance){
if(StrUtil.isEmpty(serialNumber) || StrUtil.isEmpty(identifier)){
return false;
}
SlideCaptcha slideCaptcha = slideCaptchaRepository.findFirstBySerialNumberEquals(serialNumber);
if(slideCaptcha == null || !identifier.equals(slideCaptcha.getIdentifier())){
return false;
}
//slide_interval=1800000
if((System.currentTimeMillis() - slideCaptcha.getModifyTime().getTime()) > slideInterval){
return false;
}
//只判断x不判断y
Integer integer = slideCaptcha.getX();
boolean b = x >= integer - allowance && x <= integer + allowance;
if(b){
//校验成功则更新以待后续的校验
slideCaptcha.setStatus(1);
slideCaptchaRepository.saveAndFlush(slideCaptcha);
}
return b;
}
public boolean verifyCaptcha(String serialNumber, String identifier){
if(StrUtil.isEmpty(serialNumber) || StrUtil.isEmpty(identifier)){
return false;
}
SlideCaptcha slideCaptcha = slideCaptchaRepository.findFirstBySerialNumberEquals(serialNumber);
if(slideCaptcha == null || !identifier.equals(slideCaptcha.getIdentifier())){
return false;
}
if((System.currentTimeMillis() - slideCaptcha.getModifyTime().getTime()) > slideInterval){
return false;
}
//查看校验成功没有
return SlideCaptcha.STATUS_SUCCESS == slideCaptcha.getStatus();
}
public boolean deleteCaptchaBy(String serialNumber){
SlideCaptcha slideCaptcha = slideCaptchaRepository.findFirstBySerialNumberEquals(serialNumber);
if(null != slideCaptcha){
slideCaptchaRepository.delete(slideCaptcha);
}
return true;
}
}

View File

@ -0,0 +1,126 @@
package cn.palmte.work.service;
import cn.palmte.work.model.*;
import cn.palmte.work.utils.InterfaceUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import top.jfunc.common.db.bean.Page;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Service
public class SysPermissionService {
@Autowired
private SysPermissionRepositoryCustom sysPermissionRepositoryCustom;
@Autowired
private SysPermissionRepository sysPermissionRepository;
@Autowired
private SysRolePermissionRepository sysRolePermissionRepository;
@Autowired
private SysRoleRepository sysRoleRepository;
private static final Logger logger = LoggerFactory.getLogger(SysPermissionService.class);
/**
*
*/
public Page<SysPermission> getAllPermissionListByPage(ConcurrentHashMap<String, String> searchInfo, String pageNumber) {
return sysPermissionRepositoryCustom.getAllPermissionListByPage(searchInfo, pageNumber);
}
public List<String> getAllPermissionList() {
return sysPermissionRepository.findAllPermissionUrls();
}
/**
*
*/
public boolean deletePermissionByIDs(String[] ids) {
boolean deleted = true;
for (String id : ids) {
SysPermission permission = sysPermissionRepository.findOne(Integer.parseInt(id));
permission.setIsDeleted(1);
permission.setLastUpdatedBy(InterfaceUtil.getAdminId());// 当前登录人
permission.setLastUpdatedTime(new Date());
try {
sysPermissionRepository.save(permission);
} catch (Exception e) {
e.printStackTrace();
deleted = false;
break;
}
}
return deleted;
}
/**
*
*/
@Transactional(rollbackFor = Exception.class)
public void addPermission(SysPermission sysPermission) {
sysPermission.setCreatedBy(InterfaceUtil.getAdminId()); // 当前登录人
sysPermission.setCreatedTime(new Date());
sysPermission.setLastUpdatedBy(InterfaceUtil.getAdminId());
sysPermission.setLastUpdatedTime(new Date());
sysPermission = sysPermissionRepository.saveAndFlush(sysPermission);
int permissionID = sysPermission.getId();
// 新增权限时,默认在角色-权限表中新增一组关系。默认给系统管理员授权。(注意:角色表中必须只要一个系统管理员角色。)即使用其它角色新增一个资源时,也是默认赋给系统管理员角色授权。
int superAdminRoleId = 1;
try {
SysRole sysRole = sysRoleRepository.findSuperAdminRole();
superAdminRoleId = sysRole.getId();
} catch (Exception e) {
e.printStackTrace();
}
SysRolePermission rolePermission = new SysRolePermission();
rolePermission.setRoleId(superAdminRoleId);// 即最高权限-系统管理员角色id。
rolePermission.setPermissionId(permissionID);
rolePermission.setCreatedBy(InterfaceUtil.getAdminId()); // 当前登录人
rolePermission.setCreatedTime(new Date());
rolePermission.setLastUpdatedBy(InterfaceUtil.getAdminId());
rolePermission.setLastUpdatedTime(new Date());
sysRolePermissionRepository.save(rolePermission);
}
/**
*
*/
public void updatePermission(SysPermission sysPermission, String permissionID) {
SysPermission permission = sysPermissionRepository.findOne(Integer.parseInt(permissionID));
permission.setName(sysPermission.getName());
permission.setIcon(sysPermission.getIcon());
permission.setUrl(sysPermission.getUrl());
permission.setLevel(sysPermission.getLevel());
permission.setType(sysPermission.getType());
permission.setSort(sysPermission.getSort());
permission.setRemark(sysPermission.getRemark());
permission.setParentId(sysPermission.getParentId());
permission.setPermission(sysPermission.getPermission());
permission.setLastUpdatedBy(InterfaceUtil.getAdminId());
permission.setLastUpdatedTime(new Date());
sysPermissionRepository.saveAndFlush(permission);
}
}

View File

@ -0,0 +1,60 @@
package cn.palmte.work.service;
import cn.palmte.work.model.SysRolePermission;
import cn.palmte.work.model.SysRolePermissionRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
* @author
*/
@Service
public class SysRolePermissionService {
@Autowired
private SysRolePermissionRepository sysRolePermissionRepository;
private static final Logger logger = LoggerFactory.getLogger(SysRolePermissionService.class);
/**
*
*/
@Transactional(rollbackFor = Exception.class)
public boolean deleteSysRolePermissionByIDs(String[] ids){
boolean deleted = true;
for(String id : ids){
try {
sysRolePermissionRepository.deleteSysRolePermissionByPermissionId(Integer.parseInt(id));
} catch (Exception e) {
e.printStackTrace();
deleted = false;
break;
}
}
return deleted;
}
public List<Integer> getPermissionIds(int roleId){
List<SysRolePermission> list =sysRolePermissionRepository.findPerListByRoleId(roleId);
List<Integer> permIdList = new ArrayList<Integer>();
for(SysRolePermission permission : list){
permIdList.add(permission.getPermissionId());
}
return permIdList;
}
}

View File

@ -0,0 +1,332 @@
package cn.palmte.work.service;
import cn.palmte.work.model.*;
import cn.palmte.work.pojo.PermissionNode;
import cn.palmte.work.pojo.PermissionTree;
import cn.palmte.work.utils.InterfaceUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import top.jfunc.common.db.QueryHelper;
import top.jfunc.common.db.bean.Page;
import top.jfunc.common.db.utils.Pagination;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@Service
public class SysRoleService {
@Autowired
private SysRoleRepository sysRoleRepository;
@Autowired
private SysPermissionRepository sysPermissionRepository;
@Autowired
private SysRolePermissionRepository sysRolePermissionRepository;
@Autowired
private SysRoleRepositoryImpl sysRoleRepositoryImpl;
@Autowired
private SysRolePermissionService sysRolePermissionService;
@Autowired
private SysUserRoleRepository sysUserRoleRepository;
@Autowired
Pagination pagination;
private static final Logger logger = LoggerFactory.getLogger(SysRoleService.class);
private static final String SELECTED_PERMISSION_PREFIX = "rptList$ctl$cblActionType$";
/**
*
*/
public Page<SysRole> getAllRoleListByPage(ConcurrentHashMap<String, String> searchInfo, String pageNumber, int roleType){
return sysRoleRepositoryImpl.getAllRoleListByPage(searchInfo,pageNumber,roleType);
}
public Page<SysRole> list(ConcurrentHashMap<String, String> searchInfo, int pageNumber, int pageSize){
QueryHelper queryHelper = new QueryHelper("*", " FROM sys_role");
queryHelper.addCondition("is_deleted=0");
queryHelper.addCondition(searchInfo.containsKey("name"), "name like ?", "%" +
searchInfo.get("name") + "%");
queryHelper.addOrderProperty("created_time",false);
return pagination.paginate(queryHelper.getSql(), SysRole.class, pageNumber, pageSize);
}
public List<SysRole> getAllRole(){
return sysRoleRepository.findAll();
}
public List<SysRole> getAllEnableSysRole(){
return sysRoleRepository.getAllEnableSysRole();
}
/**
*
*/
public List<SysRole> geBelowRoleTypes(int roleType){
return sysRoleRepositoryImpl.geBelowRoleTypes(roleType);
}
public List<SysRole> getBelowOneRoleTypes(int roleType){
return sysRoleRepositoryImpl.getBelowTypes(roleType);
}
public SysRole fingSysRoleById(int id){
return sysRoleRepository.findSysRoleById(id);
}
/**
* ()
* @param roleId id
* @return
*/
public PermissionNode getPermissionNodeTree(int roleId){
//获取当前登录人角色所拥有的权限列表
List<SysPermission> permList=sysPermissionRepository.findPermissionByRoleId(roleId);
List<Integer> selectedPermIdList = new ArrayList<Integer>();
PermissionNode root = PermissionTree.parsePermsNodeTree(permList, selectedPermIdList);
return root;
}
/**
* ()
* @param adminRoleId id
* @param roleId id
* @return
*/
public PermissionNode getPermissionNodeTreeForEdit(int adminRoleId, int roleId){
List<SysPermission> permList=sysPermissionRepository.findPermissionByRoleId(adminRoleId);
//已分配的权限id
List<Integer> selectedPermIdList =sysRolePermissionService.getPermissionIds(roleId);
PermissionNode root = PermissionTree.parsePermsNodeTree(permList, selectedPermIdList);
return root;
}
/**
*
*/
@Transactional(rollbackFor = Exception.class)
public void addOrUpdatePermission(Map<String, Object> reqMap,int roleId){
int updateRoleId=0;
if(-1 == roleId){
// 新增角色
updateRoleId=addToRoleTable(reqMap);
} else{
// 修改角色
updateRoleId=updateToRoleTable(reqMap, roleId);
// 删除原"角色-权限"映射关系
sysRolePermissionRepository.deleteSysRolePermissionByRoleId(roleId);
}
// 获取权限选中PermissionID写入tcm_sys_role_permission
saveRolePermission(reqMap,updateRoleId);
}
private int addToRoleTable(Map<String, Object> reqMap){
SysRole role=new SysRole();
role.setName(reqMap.get("roleName")!=null?reqMap.get("roleName").toString():null);
//role.setLevel(reqMap.containsKey("roleLevel")?Integer.parseInt(reqMap.get("roleLevel").toString()):1);//第一个版本 默认都是省级
role.setIsEnable(Integer.parseInt(reqMap.get("isActive").toString()));
//role.setType(Integer.parseInt(reqMap.get("roleType").toString()));
role.setCreatedBy(InterfaceUtil.getAdminId());//当前登录人
role.setCreatedTime(new Date());
role.setLastUpdatedBy(InterfaceUtil.getAdminId());
role.setLastUpdatedTime(new Date());
role.setType(1);
role=sysRoleRepository.saveAndFlush(role);
return role.getId();
}
/**
* tcm_sys_role_permission
*/
private void saveRolePermission(Map<String, Object> reqMap,int roleId){
/* 从数据库获取所有权限ID-ParentID映射集合 */
Map<String, String> allPermissionMap = getAllPermissionMap();
/* 从参数中获取选中权限ID列表 */
List<String> selectPermissinoIdList = getSelectPermissionIdFromParams(reqMap, allPermissionMap);
/* 保存选中权限ID---->sys_role_permission表 */
saveSelectedPermissionIdList(roleId, selectPermissinoIdList);
}
/**
* @Title: ID-ParentID
* @return Map<String,String>
*/
private Map<String, String> getAllPermissionMap(){
List<SysPermission> allPermission = sysPermissionRepository.findAllPermission();
Map<String, String> permIdMaps = new HashMap<String, String>();
for(SysPermission perm : allPermission){
permIdMaps.put(String.valueOf(perm.getId()), String.valueOf(perm.getParentId()));
}
return permIdMaps;
}
/**
* @Title: permission
* @param allPermissionIDMap DBID
* @return Map<String,String> PermissionID
*/
private List<String> getSelectPermissionIdFromParams(Map<String, Object> paraMap,
Map<String, String> allPermissionIDMap){
List<String> selectPermissinoIDList = new ArrayList<String>();
for(Map.Entry<String, Object> entry : paraMap.entrySet()){
if(entry.getKey().startsWith(SELECTED_PERMISSION_PREFIX)){
Object value = entry.getValue();
putParentPermissionIntoMap(allPermissionIDMap, selectPermissinoIDList, value.toString());
}
}
return selectPermissinoIDList;
}
/**
* @Title: ID---->tcm_sys_role_permission
* @param roleId ID
* @param selectPermissinoIdList ID
*
*/
private void saveSelectedPermissionIdList(int roleId, List<String> selectPermissinoIdList){
for(String pId : selectPermissinoIdList){
save2RolePermission(roleId, pId);
}
}
private void save2RolePermission(int roleId, String permissionId){
SysRolePermission rolePerm = new SysRolePermission();
rolePerm.setRoleId(roleId);
rolePerm.setPermissionId(Integer.parseInt(permissionId));
rolePerm.setCreatedBy(InterfaceUtil.getAdminId());
rolePerm.setCreatedTime(new Date());
rolePerm.setLastUpdatedBy(InterfaceUtil.getAdminId());
rolePerm.setLastUpdatedTime(new Date());
sysRolePermissionRepository.saveAndFlush(rolePerm);
}
/**
* @Title: Map
*
* @param allPermissionMap Map
* @param selectPermissinoIDList Map
* @param permID ID void
*
*/
private void putParentPermissionIntoMap(Map<String, String> allPermissionMap, List<String> selectPermissinoIDList,
String permID){
/* 找出父节点添加到待插入PermissionMaps中 */
String pid = permID;
while(true){
String parentID = allPermissionMap.get(pid);
if(pid.equals("0")){
break;
} else{
logger.info("pid=" + pid + ",parentID=" + parentID);
if(!selectPermissinoIDList.contains(pid)){
selectPermissinoIDList.add(pid);
}
pid = parentID;
}
}
}
private int updateToRoleTable(Map<String, Object> reqMap, int roleId){
SysRole role =sysRoleRepository.findSysRoleById(roleId);
role.setName(reqMap.get("roleName").toString());
//role.setLevel(Integer.parseInt(reqMap.get("roleLevel").toString()));
//role.setType(Integer.parseInt(reqMap.get("roleType").toString()));
role.setIsEnable(Integer.parseInt(reqMap.get("isActive").toString()));
role.setLastUpdatedBy(InterfaceUtil.getAdminId());
role.setLastUpdatedTime(new Date());
role=sysRoleRepository.saveAndFlush(role);
return role.getId();
}
/**
*
*/
public int cheakRoleName(int id,String name){
return sysRoleRepository.cheakRoleName(id, name);
}
@Transactional()
public String deleteSelectedPermission(String[] ids){
StringBuffer success=new StringBuffer();
StringBuffer fail=new StringBuffer();
int successCount=0;
int failCount=0;
for(String id : ids){
List<SysUserRole> userRoleList = sysUserRoleRepository.findRoleByRoleId(Integer.parseInt(id));
SysRole role = sysRoleRepository.findSysRoleById(Integer.parseInt(id));
if(userRoleList != null && userRoleList.size() > 0){
failCount++;
logger.info("角色[" + role.getName() + "]下存在用户,删除失败!");
fail.append("[" + role.getName() + "]");
}else {
role.setDeleted(1);
role.setLastUpdatedTime(new Date());
role.setLastUpdatedBy(InterfaceUtil.getAdminId());
sysRoleRepository.saveAndFlush(role);
deleteRolePermissionMap(id);
successCount++;
logger.info("角色[" + role.getName() + "],删除成功!");
success.append("[" + role.getName() + "]");
}
}
String allMsg="";
if (successCount==0&&failCount!=0){
allMsg=failCount+"个删除失败:"+fail.toString()+"下存在用户,删除失败!";
}else if (failCount==0&&successCount!=0) {
allMsg=successCount+"个删除成功:"+success.toString()+"。";
}else if (failCount!=0&&successCount!=0){
allMsg=successCount+"个删除成功:"+success.toString()+"。 "+failCount+"个删除失败:"+fail.toString()+"下存在用户,删除失败!";
}
return allMsg;
}
/**
*
*/
private void deleteRolePermissionMap(String roleId){
sysRolePermissionRepository.deleteSysRolePermissionByRoleId(Integer.parseInt(roleId));
}
/**
*
* @param status
* @param id
* @return
*/
public boolean enableOrDisable(int status, int id){
SysRole one = sysRoleRepository.findOne(id);
one.setIsEnable(status);
SysRole sysRole = sysRoleRepository.saveAndFlush(one);
if(null != sysRole){
return true;
}
return false;
}
}

View File

@ -0,0 +1,73 @@
package cn.palmte.work.service;
import cn.palmte.work.config.UploadProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import sun.misc.BASE64Decoder;
import top.jfunc.common.datetime.DatetimeUtils;
import top.jfunc.common.utils.CommonUtil;
import top.jfunc.common.utils.FileUtil;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Date;
/**
* @author xiongshiyan at 2020/10/13 , contact me with email yanshixiong@126.com or phone 15208384257
*/
@Service
public class UploadService {
private static final Logger logger = LoggerFactory.getLogger(UploadService.class);
public static final String DATA_IMAGE_PNG_BASE64 = "data:image/png;base64,";
public static final String DATA_IMAGE_JPEG_BASE64 = "data:image/jpeg;base64,";
public static final String DATA_IMAGE_JPG_BASE64 = "data:image/jpg;base64,";
@Autowired
private UploadProperties uploadProperties;
public String upload(String base64Str){
String suffix = "png";
if (base64Str.contains(DATA_IMAGE_PNG_BASE64)) {
base64Str = base64Str.replaceAll(DATA_IMAGE_PNG_BASE64, "");
suffix = "png";
} else if (base64Str.contains(DATA_IMAGE_JPEG_BASE64)) {
base64Str = base64Str.replaceAll(DATA_IMAGE_JPEG_BASE64, "");
suffix = "jpeg";
}else if (base64Str.contains(DATA_IMAGE_JPG_BASE64)) {
base64Str = base64Str.replaceAll(DATA_IMAGE_JPG_BASE64, "");
suffix = "jpg";
}
String uploadPath = uploadProperties.getPath();
String uploadPrefix = uploadProperties.getPrefix();
String yyyyMMdd = DatetimeUtils.toStr(new Date(), "yyyyMMdd");
String saveDir = uploadPath + "/" + yyyyMMdd;
FileUtil.makeSureExistDir(saveDir);
String fileName = CommonUtil.randomString(32) + "." + suffix;
String absolutePath = saveDir + "/" + fileName;
File file = new File(absolutePath);
decodeAndWrite(base64Str , file);
return uploadPrefix + "/" + yyyyMMdd + "/" + fileName;
}
private void decodeAndWrite(String base64Str, File destFile) {
try {
// Base64解码
byte[] bytes = new BASE64Decoder().decodeBuffer(base64Str);
for (int i = 0; i < bytes.length; ++i) {
if (bytes[i] < 0) {
// 调整异常数据
bytes[i] += 256;
}
}
Files.write(Paths.get(destFile.getAbsolutePath()), bytes);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
}

View File

@ -0,0 +1,32 @@
package cn.palmte.work.service.map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* @author xiongshiyan at 2021/5/18 , contact me with email yanshixiong@126.com or phone 15208384257
*/
public class MemorySimpleMap<K,V> implements SimpleMap<K,V>{
private ConcurrentMap<K,V> concurrentMap = new ConcurrentHashMap<>();
@Override
public V get(K k) {
return concurrentMap.get(k);
}
@Override
public V delete(K k) {
return concurrentMap.remove(k);
}
@Override
public void set(K k, V v, long expireIns) {
concurrentMap.put(k,v);
}
@Override
public Set<K> keys() {
return concurrentMap.keySet();
}
}

View File

@ -0,0 +1,16 @@
package cn.palmte.work.service.map;
import cn.palmte.work.config.SystemConfigWithMemory;
import java.util.Set;
/**
* redis{@link SystemConfigWithMemory#simpleMap()}
* @author xiongshiyan at 2021/5/18 , contact me with email yanshixiong@126.com or phone 15208384257
*/
public interface SimpleMap<K,V> {
V get(K k);
void set(K k,V v,long expireIns);
V delete(K k);
Set<K> keys();
}

View File

@ -0,0 +1,30 @@
package cn.palmte.work.service.token.redis;
/**
* APItoken
* @author xiongshiyan at 2018/8/15 , contact me with email yanshixiong@126.com or phone 15208384257
*/
/*public class ApiTokenManager extends BaseMultiTokenManager<Manager> {
private String tokenPrefix;
@Override
public String getToken(Manager m){
return tokenPrefix + "-" + nowStr() + CommonUtil.randomString(16);
}
private String nowStr(){
return DatetimeUtils.toStr(new Date() , DatetimeUtils.SDF_DATETIME_SHORT);
}
@Override
protected String key(Manager member){
return tokenPrefix + "-" + member.getUserName();
}
public String getTokenPrefix() {
return tokenPrefix;
}
public void setTokenPrefix(String tokenPrefix) {
this.tokenPrefix = tokenPrefix;
}
}*/

View File

@ -0,0 +1,29 @@
package cn.palmte.work.service.token.redis;
/**
* redis
* @author xiongshiyan at 2018/10/8 , contact me with email yanshixiong@126.com or phone 15208384257
*/
/*public class RedisCaptchaManager extends AbstractRedisCaptchaManager<Manager> {
private static final String REDIS_PREFIX = "captcha:";
private CaptchaCodeService captchaCodeService;
public void setCaptchaCodeService(CaptchaCodeService captchaCodeService) {
this.captchaCodeService = captchaCodeService;
}
@Override
public byte[] generateCodeImage(int width, int height, String code) throws IOException {
return captchaCodeService.generateCodeImage(width, height, code);
}
@Override
public String generateCode(int numbers) {
return captchaCodeService.generateCode(numbers);
}
@Override
protected String key(Manager member){
return REDIS_PREFIX + member.getUserName();
}
}*/

View File

@ -0,0 +1,13 @@
package cn.palmte.work.service.token.redis;
/**
* redis
* @author xiongshiyan at 2018/10/8 , contact me with email yanshixiong@126.com or phone 15208384257
*/
/*public class RedisErrorCountManager extends AbstractRedisErrorCountManager<Manager> {
private static final String REDIS_PREFIX = "errorCount:";
@Override
protected String key(Manager member){
return REDIS_PREFIX + member.getUserName();
}
}*/

View File

@ -0,0 +1,115 @@
package cn.palmte.work.shiro;
import cn.palmte.work.model.Admin;
import cn.palmte.work.service.AdminService;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpSession;
import java.util.List;
/**
* Created by wang.lin@esstx.cn on 2018/4/17.
*/
public class ShiroAuthorizingRealm extends AuthorizingRealm {
private final static Logger logger = LoggerFactory.getLogger(ShiroAuthorizingRealm.class);
private static final String AUTHORITIES = "authorities";
@Autowired
private AdminService adminService;
//shiro的权限配置方法
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
logger.debug("权限配置-->doGetAuthorizationInfo");
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
logger.debug("----------------------------->" + principals.getPrimaryPrincipal());
// 获取当前登录的用户名
ShiroPrincipal subject = (ShiroPrincipal) super.getAvailablePrincipal(principals);
String adminName = subject.getAdminName();
String adminId = subject.getId();
HttpSession session = getSession();
try {
if (!subject.isAuthorized()) {
// 根据用户名称,获取该用户所有的权限列表
List<String> authorities = adminService.getAuthoritiesName(adminId);
List<String> rolelist = adminService.getRolesName(adminId);
// List<String> urls = adminService.getAuthoritieUrls(adminId);
//subject.setAuthorities(authorities);
session.setAttribute(AUTHORITIES, authorities);
subject.setRoles(rolelist);
// subject.setUrls(urls);
subject.setAuthorized(true);
logger.debug("用户【" + adminName + "】授权初始化成功......");
logger.debug("用户【" + adminName + "】 角色列表为:" + subject.getRoles());
logger.debug("用户【" + adminName + "】 权限列表为:" + authorities);
}
} catch (RuntimeException e) {
throw new AuthorizationException("用户【" + adminName + "】授权失败");
}
// 给当前用户设置权限
List<String> authorities = null;
if (session.getAttribute(AUTHORITIES) != null) {
authorities = (List<String>) session.getAttribute(AUTHORITIES);
}
authorizationInfo.addStringPermissions(authorities);
authorizationInfo.addRoles(subject.getRoles());
return authorizationInfo;
}
//shiro的身份验证方法
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
String username = upToken.getUsername();
if (username == null) {
logger.warn("用户名不能为空");
throw new AccountException("用户名不能为空");
}
Admin admin = null;
try {
admin = adminService.getAdminByUsername(username);
} catch (Exception ex) {
logger.warn("获取用户失败\n" + ex.getMessage());
}
if (admin == null) {
logger.warn("用户不存在");
throw new UnknownAccountException("用户不存在!");
}
ShiroPrincipal subject = new ShiroPrincipal(admin);
String adminId = String.valueOf(admin.getId());
List<String> authorities = adminService.getAuthoritiesName(adminId);
List<String> rolelist = adminService.getRolesName(adminId);
// List<String> urls = adminService.getAuthoritieUrls(adminId);
// subject.setUrls(urls);
subject.setRoles(rolelist);
//subject.setAuthorities(authorities);
HttpSession session = getSession();
session.setAttribute(AUTHORITIES, authorities);
subject.setAuthorized(true);
return new SimpleAuthenticationInfo(subject, admin.getPassword(), getName());
}
private HttpSession getSession() {
return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest().getSession();
}
}

View File

@ -0,0 +1,163 @@
package cn.palmte.work.shiro;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;
import org.apache.shiro.cache.MemoryConstrainedCacheManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.CookieRememberMeManager;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.apache.shiro.mgt.SecurityManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Created by wang.lin@esstx.cn on 2018/4/17.
*/
@Configuration
public class ShiroConfig {
private static final Logger log = LoggerFactory.getLogger(ShiroFilterFactoryBean.class);
@Bean(name = "securityManager")
public SecurityManager securityManager(@Qualifier("shiroAuthorizingRealm") ShiroAuthorizingRealm shiroAuthorizingRealm,
@Qualifier("cookieRememberMeManager") CookieRememberMeManager cookieRememberMeManager) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// 设置realm.
securityManager.setRealm(shiroAuthorizingRealm);
// 设置rememberMe管理器
securityManager.setRememberMeManager(cookieRememberMeManager);
// 设置缓存管理器
securityManager.setCacheManager(new MemoryConstrainedCacheManager());
return securityManager;
}
/**
* realm
*/
@Bean(name = "shiroAuthorizingRealm")
public ShiroAuthorizingRealm shiroAuthorizingRealm(
@Qualifier("simpleCredentialsMatcher") SimpleCredentialsMatcher matcher
) {
// @Qualifier("ehCacheManager") EhCacheManager ehCacheManager
log.info("myShiroRealm()");
ShiroAuthorizingRealm myAuthorizingRealm = new ShiroAuthorizingRealm();
// 设置密码凭证匹配器
myAuthorizingRealm.setCredentialsMatcher(matcher); // myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());
return myAuthorizingRealm;
}
/**
* cookie;
*/
@Bean
public SimpleCookie rememberMeCookie() {
log.info("rememberMeCookie()");
// 这个参数是cookie的名称对应前端的checkbox 的name = rememberMe
SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
// <!-- 记住我cookie生效时间30天259200 ,单位秒;-->
simpleCookie.setMaxAge(600);
return simpleCookie;
}
/**
* cookie;
*/
@Bean(name = "cookieRememberMeManager")
public CookieRememberMeManager rememberMeManager() {
System.out.println("rememberMeManager()");
CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
cookieRememberMeManager.setCookie(rememberMeCookie());
return cookieRememberMeManager;
}
/**
*
*/
@Bean(name = "simpleCredentialsMatcher")
public SimpleCredentialsMatcher simpleCredentialsMatcher() {
SimpleCredentialsMatcher simpleCredentialsMatcher = new SimpleCredentialsMatcher();
return simpleCredentialsMatcher;
}
/**
* shiro aop. 使;; Controller使@RequiresPermissions
*/
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(
@Qualifier("securityManager") SecurityManager securityManager) {
log.info("authorizationAttributeSourceAdvisor()");
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}
/**
* shiro西
*/
@Bean(name = "lifecycleBeanPostProcessor")
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor();
}
@Bean
public ShiroFilterFactoryBean shiroFilter(@Qualifier("securityManager") SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// 必须设置 SecurityManager
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 拦截器.
Map<String, String> map = new LinkedHashMap<String, String>();
//特殊URL放开
map.put("/admin/login", "anon");
map.put("/admin/logout", "logout");
map.put("/admin/singIn", "anon");
map.put("/admin/err", "anon");
map.put("/admin/captcha", "anon");
map.put("/api/**", "anon");
map.put("/file/**", "anon");
//静态资源放开, 以后所有的静态资源都放到这些目录下,否则需要在此添加映射
map.put("/assets/**", "anon");
map.put("/common/**", "anon");
map.put("/favicon.png", "anon");
map.put("/img/**", "anon");
map.put("/jqPaginator/**", "anon");
map.put("/layer/**", "anon");
map.put("/ueditor/**", "anon");
map.put("/favicon.png", "anon");
// map.put("/admin/login", "authc");
// map.put("/admin/center", "authc");
// map.put("/admin/console", "authc");
// map.put("/account/password", "authc");
// map.put("/account/updatePassword", "authc");
map.put("/**", "authc");
// 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
shiroFilterFactoryBean.setLoginUrl("/admin/login");
// 登录成功后要跳转的链接
shiroFilterFactoryBean.setSuccessUrl("/admin/center");
// 未授权界面;
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
// Map<String,Filter> filterMap = new LinkedHashMap<>();
// filterMap.put("perms",new ShiroPermissionsFilter());
// shiroFilterFactoryBean.setFilters(filterMap);
return shiroFilterFactoryBean;
}
}

View File

@ -0,0 +1,70 @@
package cn.palmte.work.shiro;
import cn.palmte.work.service.SysPermissionService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* Created by wang.lin@esstx.cn on 2018/5/6.
*/
@Component
public class ShiroPermissionsFilter extends PermissionsAuthorizationFilter {
@Autowired
private SysPermissionService sysPermissionService;
@Override
public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws IOException {
// 记录日志
/**获取用户信息,可以根据用户信息查看有没有对应模块的权限*/
ShiroPrincipal principal = (ShiroPrincipal) SecurityUtils.getSubject().getPrincipal();
//获得请求路径
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String path = httpServletRequest.getServletPath();
//true有权限; false没有权限
boolean isPermitted = true;
/*if(sysPermissionService==null){
sysPermissionService= (SysPermissionService) SpringContextUtils.getContext().getBean("sysPermissionService");
}*/
List<String> allUrls = sysPermissionService.getAllPermissionList();
if (principal != null && allUrls.contains(path)) {
List<String> urls = principal.getUrls();
if (!urls.contains(path)) {
isPermitted = false;
}
}
return isPermitted;
}
/**
* shiroperms
*
* @param servletRequest
* @param servletResponse
* @return
* @throws IOException
*/
@Override
protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException {
try {
servletResponse.setCharacterEncoding("UTF-8");
servletResponse.setContentType("application/json");
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
httpServletResponse.sendRedirect("../common/401.html");
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}

View File

@ -0,0 +1,94 @@
package cn.palmte.work.shiro;
import cn.palmte.work.model.Admin;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* Created by wang.lin@esstx.cn on 2018/4/17.
*/
public class ShiroPrincipal implements Serializable {
private static final long serialVersionUID = 5547892266826282572L;
// 用户对象
private Admin admin;
// 用户权限列表
private List<String> authorities = new ArrayList<String>();
// 用户角色列表
private List<String> roles = new ArrayList<String>();
// 是否已授权。如果已授权,则不需要再从数据库中获取权限信息,减少数据库访问
// 这里会导致修改权限时,需要重新登录方可有效
private boolean isAuthorized = false;
private List<String> urls = new ArrayList<String>();
/**
* Admin AdminPrincipal
*
* @param admin
*/
public ShiroPrincipal(Admin admin) {
this.admin = admin;
}
public List<String> getUrls() {
return urls;
}
public void setUrls(List<String> urls) {
this.urls = urls;
}
public List<String> getAuthorities() {
return authorities;
}
public void setAuthorities(List<String> authorities) {
this.authorities = authorities;
}
public List<String> getRoles() {
return roles;
}
public void setRoles(List<String> roles) {
this.roles = roles;
}
public boolean isAuthorized() {
return isAuthorized;
}
public void setAuthorized(boolean isAuthorized) {
this.isAuthorized = isAuthorized;
}
public Admin getAdmin() {
return admin;
}
public void setAdmin(Admin admin) {
this.admin = admin;
}
public String getAdminName() {
return this.admin.getUserName();
}
public String getId() {
return String.valueOf(this.admin.getId());
}
/**
* <shiro:principal/>
*/
@Override
public String toString() {
return this.admin.getUserName();
}
}

View File

@ -0,0 +1,24 @@
package cn.palmte.work.shiro;
import com.jagregory.shiro.freemarker.ShiroTags;
import freemarker.template.TemplateModelException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import javax.annotation.PostConstruct;
/**
* @author NSP
*/
@Component
public class ShiroTagsFreeMarkerCfg {
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
@PostConstruct
public void setSharedVariable() throws TemplateModelException {
freeMarkerConfigurer.getConfiguration().setSharedVariable("shiro", new ShiroTags());
}
}

View File

@ -0,0 +1,17 @@
package cn.palmte.work.shiro;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
/**
* Created by wang.lin@esstx.cn on 2018/4/20.
*/
public class ShiroUtils {
protected static Subject getSubject() {
return SecurityUtils.getSubject();
}
public static boolean hasPermission(String permission) {
return getSubject() != null && permission != null && permission.length() > 0 && getSubject().isPermitted(permission);
}
}

View File

@ -0,0 +1,104 @@
package cn.palmte.work.utils;
import top.jfunc.common.crypto.symmetric.Base64;
import java.io.*;
/**
* BASE64
* javabase64-1.3.1.jar
*
* @version 1.0
*/
public class Base64Utils {
/**
*
*/
private static final int CACHE_SIZE = 1024;
/**
* BASE64
*/
public static byte[] decode(String base64) throws Exception {
return Base64.decode(base64.getBytes());
}
/**
* BASE64
*/
public static String encode(byte[] bytes) throws Exception {
return Base64.encode(bytes);
}
/**
* BASE64
*
*/
public static String encodeFile(String filePath) throws Exception {
byte[] bytes = fileToByte(filePath);
return encode(bytes);
}
/**
* BASE64
* @param filePath
* @param base64
*/
public static void decodeToFile(String filePath, String base64) throws Exception {
byte[] bytes = decode(base64);
byteArrayToFile(bytes, filePath);
}
/**
*
*
* @param filePath
*/
public static byte[] fileToByte(String filePath) throws Exception {
byte[] data = new byte[0];
File file = new File(filePath);
if (file.exists()) {
FileInputStream in = new FileInputStream(file);
ByteArrayOutputStream out = new ByteArrayOutputStream(2048);
byte[] cache = new byte[CACHE_SIZE];
int nRead = 0;
while ((nRead = in.read(cache)) != -1) {
out.write(cache, 0, nRead);
out.flush();
}
out.close();
in.close();
data = out.toByteArray();
}
return data;
}
/**
*
*
* @param bytes
* @param filePath
*/
public static void byteArrayToFile(byte[] bytes, String filePath) throws Exception {
InputStream in = new ByteArrayInputStream(bytes);
File destFile = new File(filePath);
if (!destFile.getParentFile().exists()) {
destFile.getParentFile().mkdirs();
}
destFile.createNewFile();
OutputStream out = new FileOutputStream(destFile);
byte[] cache = new byte[CACHE_SIZE];
int nRead = 0;
while ((nRead = in.read(cache)) != -1) {
out.write(cache, 0, nRead);
out.flush();
}
out.close();
in.close();
}
}

Some files were not shown because too many files have changed in this diff Show More