Browse Source

shiro升级

v2
chenrui 2 years ago
parent
commit
078ea8c768
  1. 24
      lib/EmergencyBaseLib/EmergencyCommon/pom.xml
  2. 40
      lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/util/Md5Hash.java
  3. 1
      lib/EmergencyBaseLib/EmergencyOss/src/main/java/com/zdxt/oss/constant/Constant.java
  4. 21
      lib/EmergencyBaseLib/pom.xml
  5. 18
      lib/EmergencyCloud/pom.xml
  6. 59
      lib/EmergencyService/pom.xml
  7. 6
      lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/AppThirdLoginController.java
  8. 29
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/common/utils/CipherKeyUtil.java
  9. 6
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/CorsFilter.java
  10. 4
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/CsrfFilter.java
  11. 4
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/HostFilter.java
  12. 1
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/MySimpleCookie.java
  13. 72
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/ResourcesConfig.java
  14. 689
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/ShiroCasConfiguration.java
  15. 23
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/ShiroConfig.java
  16. 324
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/realm/ShiroCasUserRealm.java
  17. 8
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/service/PasswordService.java
  18. 146
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/web/filter/CasFilter.java
  19. 7
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/web/filter/LogoutFilter.java
  20. 4
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/controller/LoginController.java
  21. 1
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/service/UserServiceImpl.java
  22. 20
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/static/ajax/libs/jquery-layout/jquery-ui-latest.js
  23. 2
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/code/information/information.html
  24. 5
      lib/EmergencyService/zdxtEmergencyExcelService/src/main/java/com/zdxt/excel/controller/ExcelModuleController.java
  25. 4
      lib/EmergencyService/zdxtEmergencyExcelService/src/main/java/com/zdxt/excel/controller/ExcelUploadHisController.java
  26. 80
      lib/EmergencyService/zdxtEmergencyExcelService/src/main/java/com/zdxt/excel/domain/AttachmentUpload.java
  27. 9
      lib/EmergencyService/zdxtEmergencyExcelService/src/main/java/com/zdxt/excel/domain/ExcelModule.java
  28. 121
      lib/EmergencyService/zdxtEmergencyExcelService/src/main/java/com/zdxt/excel/domain/ExcelUpload.java
  29. 5
      lib/EmergencyService/zdxtEmergencyExcelService/src/main/java/com/zdxt/excel/test/TestExportService.java
  30. 2
      lib/EmergencyService/zdxtEmergencyMessageService/src/main/java/com/zdxt/message/feign/PublicMessageApiImpl.java
  31. 2
      lib/EmergencyService/zdxtEmergencyMessageService/src/main/java/com/zdxt/message/tio/TioWsMsgHandler.java
  32. 6
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/controller/ThirdLoginController.java
  33. 5
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/MssqApiService.java
  34. 5
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/AccessTokenServiceImpl.java
  35. 9
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/EnterpriseInformationServiceImpl.java
  36. 6
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/MssqApiServiceImpl.java
  37. 6
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/ThirdLoginServiceImpl.java
  38. 17
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/utils/Azdg.java
  39. 6
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/utils/HttpUtil.java
  40. 5
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/utils/QRCodeUtil.java
  41. 6
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/utils/ServiceInvocation.java
  42. 21
      lib/EmergencyServiceApi/pom.xml
  43. 17
      lib/ZdxtComponent/pom.xml

24
lib/EmergencyBaseLib/EmergencyCommon/pom.xml

@ -12,18 +12,18 @@
<groupId>EmergencyBaseLib</groupId>
<artifactId>EmergencyCommon</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<!-- <build>-->
<!-- <plugins>-->
<!-- <plugin>-->
<!-- <groupId>org.apache.maven.plugins</groupId>-->
<!-- <artifactId>maven-compiler-plugin</artifactId>-->
<!-- <configuration>-->
<!-- <source>8</source>-->
<!-- <target>8</target>-->
<!-- </configuration>-->
<!-- </plugin>-->
<!-- </plugins>-->
<!-- </build>-->
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>

40
lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/util/Md5Hash.java

@ -0,0 +1,40 @@
package com.zdxt.common.util;
import cn.hutool.core.codec.Base64;
import org.apache.shiro.codec.Hex;
import org.apache.shiro.crypto.hash.SimpleHash;
//import org.apache.shiro.lang.codec.Base64;
//import org.apache.shiro.lang.codec.Hex;
public class Md5Hash extends SimpleHash {
public static final String ALGORITHM_NAME = "MD5";
public Md5Hash() {
super("MD5");
}
public Md5Hash(Object source) {
super("MD5", source);
}
public Md5Hash(Object source, Object salt) {
super("MD5", source, salt);
}
public Md5Hash(Object source, Object salt, int hashIterations) {
super("MD5", source, salt, hashIterations);
}
public static Md5Hash fromHexString(String hex) {
Md5Hash hash = new Md5Hash();
hash.setBytes(Hex.decode(hex));
return hash;
}
public static Md5Hash fromBase64String(String base64) {
Md5Hash hash = new Md5Hash();
hash.setBytes(Base64.decode(base64));
return hash;
}
}

1
lib/EmergencyBaseLib/EmergencyOss/src/main/java/com/zdxt/oss/constant/Constant.java

@ -1,6 +1,5 @@
package com.zdxt.oss.constant;
import org.omg.CORBA.INTERNAL;
public class Constant {

21
lib/EmergencyBaseLib/pom.xml

@ -21,8 +21,9 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<java.version>11</java.version>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<!-- <shiro.version>2.0.1</shiro.version>-->
<shiro.version>1.8.0</shiro.version>
<thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version>
<druid.version>1.2.6</druid.version>
@ -201,5 +202,21 @@
<version>2.2.13.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
<encoding>UTF-8</encoding>
<!-- <compilerArgs>-->
<!-- <arg>-XDignore.symbol.file</arg>-->
<!-- </compilerArgs>-->
<!-- <fork>true</fork>-->
</configuration>
</plugin>
</plugins>
</build>
</project>

18
lib/EmergencyCloud/pom.xml

@ -8,5 +8,21 @@
<artifactId>EmergencyCloud</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
<encoding>UTF-8</encoding>
<!-- <compilerArgs>-->
<!-- <arg>-XDignore.symbol.file</arg>-->
<!-- </compilerArgs>-->
<!-- <fork>true</fork>-->
</configuration>
</plugin>
</plugins>
</build>
</project>

59
lib/EmergencyService/pom.xml

@ -29,9 +29,10 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<java.version>11</java.version>
<!-- <shiro.version>2.0.1</shiro.version>-->
<shiro.version>1.8.0</shiro.version>
<thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version>
<thymeleaf.extras.shiro.version>2.1.0</thymeleaf.extras.shiro.version>
<mybatis.spring.boot.starter.version>1.3.2</mybatis.spring.boot.starter.version>
<pagehelper.spring.boot.starter.version>1.2.5</pagehelper.spring.boot.starter.version>
<fastjson.version>1.2.70</fastjson.version>
@ -190,32 +191,32 @@
</dependency>
<!-- Shiro核心框架 -->
<!--<dependency>-->
<!--<groupId>org.apache.shiro</groupId>-->
<!--<artifactId>shiro-core</artifactId>-->
<!--<version>${shiro.version}</version>-->
<!--</dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.shiro</groupId>-->
<!-- <artifactId>shiro-core</artifactId>-->
<!-- <version>${shiro.version}</version>-->
<!-- </dependency>-->
<!--&lt;!&ndash; Shiro使用Spring框架&ndash;&gt;-->
<!--<dependency>-->
<!--<groupId>org.apache.shiro</groupId>-->
<!--<artifactId>shiro-spring</artifactId>-->
<!--<version>${shiro.version}</version>-->
<!--</dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.shiro</groupId>-->
<!-- <artifactId>shiro-spring</artifactId>-->
<!-- <version>${shiro.version}</version>-->
<!-- </dependency>-->
<!--&lt;!&ndash; Shiro使用EhCache缓存框架 &ndash;&gt;-->
<!--<dependency>-->
<!--<groupId>org.apache.shiro</groupId>-->
<!--<artifactId>shiro-ehcache</artifactId>-->
<!--<version>${shiro.version}</version>-->
<!--</dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.shiro</groupId>-->
<!-- <artifactId>shiro-ehcache</artifactId>-->
<!-- <version>${shiro.version}</version>-->
<!-- </dependency>-->
<!-- Shiro和Cas整合 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-cas</artifactId>
<version>${shiro.version}</version>
</dependency>
<!-- Shiro和Cas整合-->
<!-- <dependency>-->
<!-- <groupId>org.apache.shiro</groupId>-->
<!-- <artifactId>shiro-cas</artifactId>-->
<!-- <version>2.0.1</version>-->
<!-- </dependency>-->
<!-- thymeleaf模板引擎和shiro框架的整合 -->
<dependency>
@ -492,13 +493,13 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<source>8</source>
<target>8</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-XDignore.symbol.file</arg>
</compilerArgs>
<fork>true</fork>
<!-- <compilerArgs>-->
<!-- <arg>-XDignore.symbol.file</arg>-->
<!-- </compilerArgs>-->
<!-- <fork>true</fork>-->
</configuration>
</plugin>
</plugins>

6
lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/AppThirdLoginController.java

@ -19,6 +19,8 @@ import com.zdxt.common.util.RedisCache;
import com.zdxt.domain.auth.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Hex;
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.Controller;
@ -35,11 +37,11 @@ import static com.zdxt.code.utils.ServiceInvocation.httpRequest;
/**
* 第三方登录控制层
*/
@Slf4j
@Controller
@RequestMapping("/app/thirdLogin")
public class AppThirdLoginController {
private static final Logger log = LoggerFactory.getLogger(AppThirdLoginController.class);
@Value("${siq.code}")
private String code;

29
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/common/utils/CipherKeyUtil.java

@ -0,0 +1,29 @@
package com.zdxt.auth.common.utils;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;
/**
* shiro 密钥生成工具
*/
public class CipherKeyUtil {
/**
* 随机生成秘钥,参考org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey(int)
* @return
*/
public static byte[] generateNewKey() {
KeyGenerator kg;
try {
kg = KeyGenerator.getInstance("AES");
} catch (NoSuchAlgorithmException var5) {
String msg = "Unable to acquire AES algorithm. This is required to function.";
throw new IllegalStateException(msg, var5);
}
kg.init(128);
SecretKey key = kg.generateKey();
byte[] encoded = key.getEncoded();
return encoded;
}
}

6
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/CorsFilter.java

@ -2,8 +2,11 @@ package com.zdxt.auth.framework.config;
import com.zdxt.auth.common.utils.security.ShiroUtils;
import com.zdxt.auth.framework.shiro.jwt.JWTUtils;
import com.zdxt.common.util.AddressUtils;
import com.zdxt.domain.auth.User;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.servlet.*;
@ -20,11 +23,10 @@ import java.util.Map;
* @author: QingWang.Li
* @date: 2020/5/27 11:35
*/
@Slf4j
@Component()
public class CorsFilter implements Filter {
private static final Logger log = LoggerFactory.getLogger(CorsFilter.class);
// public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
// throws IOException, ServletException {

4
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/CsrfFilter.java

@ -18,6 +18,8 @@ import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
import com.zdxt.common.ZDResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.http.HttpStatus;
@ -31,11 +33,11 @@ import lombok.extern.slf4j.Slf4j;
* @author CL
*
*/
@Slf4j
@Component
@ConfigurationProperties(prefix = "security.csrf")
@WebFilter(filterName = "CsrfFilter", urlPatterns = "/*")
public class CsrfFilter implements Filter {
private static final Logger log = LoggerFactory.getLogger(CsrfFilter.class);
@Value("${allowed.servernames}")
private String ALLOWED_SERVERNAMES;

4
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/HostFilter.java

@ -1,6 +1,8 @@
package com.zdxt.auth.framework.config;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@ -20,9 +22,9 @@ import java.util.List;
* 多个host用逗号隔开,本地开发使用127.0.0.1,localhost
* @author liufr
*/
@Slf4j
@Component
public class HostFilter implements Filter{
private static final Logger log = LoggerFactory.getLogger(HostFilter.class);
/**
* 自定义实现host白名单添加
*/

1
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/MySimpleCookie.java

@ -1,6 +1,7 @@
package com.zdxt.auth.framework.config;
import org.apache.shiro.util.StringUtils;
//import org.apache.shiro.lang.util.StringUtils;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

72
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/ResourcesConfig.java

@ -59,40 +59,40 @@ public class ResourcesConfig implements WebMvcConfigurer
/**
* 自定义拦截规则
*/
@Override
public void addInterceptors(InterceptorRegistry registry)
{
// registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
registry.addInterceptor(new JWTInterceptor())
.addPathPatterns("/app/**")
.excludePathPatterns("/app/thirdLogin/siqLogin","/app/thirdLogin/siqLoginTest",
"/app/thirdLogin/getSiqCode",
"/common/upload",
"/app/thirdLogin/szyptLogin/**",
"/captcha/captchaImage/**",
"/appLogin","/login","/index",
"/enterpriseInformation",
"/code/registration",
"/code/linkage",
"/code/ruleList",
"/code/LawEnforcementWarningList",
"/system/dept/**",
"/system/user/**",
"/system/role/**",
"/system/post/**",
"/system/menu/**",
"/code/linkage/**",
"/monitor/operlog",
"/monitor/logininfor",
"/system/dict",
"/system/config",
"/monitor/job",
"/statistical/analysis",
"/statistical/view",
"/**/*.css",
"/**/*.js", "/**/*.png", "/**/*.jpg",
"/**/*.jpeg", "/**/*.gif", "/**/fonts/*"
).addPathPatterns("/**");
// 除了登录放行,其他接口都token验证
}
// @Override
// public void addInterceptors(InterceptorRegistry registry)
// {
//// registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
// registry.addInterceptor(new JWTInterceptor())
// .addPathPatterns("/app/**")
// .excludePathPatterns("/app/thirdLogin/siqLogin","/app/thirdLogin/siqLoginTest",
// "/app/thirdLogin/getSiqCode",
// "/common/upload",
// "/app/thirdLogin/szyptLogin/**",
// "/captcha/captchaImage/**",
// "/appLogin","/login","/index",
// "/enterpriseInformation",
// "/code/registration",
// "/code/linkage",
// "/code/ruleList",
// "/code/LawEnforcementWarningList",
// "/system/dept/**",
// "/system/user/**",
// "/system/role/**",
// "/system/post/**",
// "/system/menu/**",
// "/code/linkage/**",
// "/monitor/operlog",
// "/monitor/logininfor",
// "/system/dict",
// "/system/config",
// "/monitor/job",
// "/statistical/analysis",
// "/statistical/view",
// "/**/*.css",
// "/**/*.js", "/**/*.png", "/**/*.jpg",
// "/**/*.jpeg", "/**/*.gif", "/**/fonts/*"
// ).addPathPatterns("/**");
//// 除了登录放行,其他接口都token验证
// }
}

689
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/ShiroCasConfiguration.java

@ -1,352 +1,353 @@
package com.zdxt.auth.framework.config;
import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;
import com.zdxt.auth.common.utils.StringUtils;
import com.zdxt.auth.framework.shiro.realm.ShiroCasUserRealm;
import com.zdxt.auth.framework.shiro.session.OnlineSessionFactory;
import com.zdxt.auth.framework.shiro.web.filter.CasFilter;
import com.zdxt.auth.framework.shiro.web.session.OnlineWebSessionManager;
import com.zdxt.auth.framework.shiro.web.session.SpringSessionValidationScheduler;
import com.zdxt.common.util.SpringUtils;
import org.apache.commons.io.IOUtils;
import org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy;
import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
import org.apache.shiro.cache.MemoryConstrainedCacheManager;
import org.apache.shiro.cache.ehcache.EhCacheManager;
import org.apache.shiro.cas.CasSubjectFactory;
import org.apache.shiro.config.ConfigurationException;
import org.apache.shiro.io.ResourceUtils;
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.filter.authc.LogoutFilter;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.web.filter.DelegatingFilterProxy;
import javax.servlet.Filter;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Shiro和Cas的整合配置文件
*
* @author: QingWang.Li
* @date: 2020/5/13 14:49
*/
// 启用cas环境时生效,环境切换在application.yml中配置
@Profile("cas")
@Configuration
public class ShiroCasConfiguration {
// Session超时时间,单位为毫秒(默认30分钟)
@Value("${shiro.session.expireTime}")
private int expireTime;
// 设置Cookie的域名
@Value("${shiro.cookie.domain}")
private String domain;
// 设置cookie的有效访问路径
@Value("${shiro.cookie.path}")
private String path;
// 设置HttpOnly属性
@Value("${shiro.cookie.httpOnly}")
private boolean httpOnly;
// 设置Cookie的过期时间,秒为单位
@Value("${shiro.cookie.maxAge}")
private int maxAge;
// 登录地址
@Value("${shiro.casLoginUrl}")
private String loginUrl;
/**
* 缓存管理器 使用Ehcache实现
*/
@Bean
public EhCacheManager getEhCacheManager() {
net.sf.ehcache.CacheManager cacheManager = net.sf.ehcache.CacheManager.getCacheManager("ruoyi");
EhCacheManager em = new EhCacheManager();
if (StringUtils.isNull(cacheManager)) {
em.setCacheManager(new net.sf.ehcache.CacheManager(getCacheManagerConfigFileInputStream()));
return em;
} else {
em.setCacheManager(cacheManager);
return em;
}
}
/**
* 返回配置文件流 避免ehcache配置文件一直被占用,无法完全销毁项目重新部署
*/
protected InputStream getCacheManagerConfigFileInputStream() {
String configFile = "classpath:ehcache/ehcache-shiro.xml";
InputStream inputStream = null;
try {
inputStream = ResourceUtils.getInputStreamForPath(configFile);
byte[] b = IOUtils.toByteArray(inputStream);
InputStream in = new ByteArrayInputStream(b);
return in;
} catch (IOException e) {
throw new ConfigurationException(
"Unable to obtain input stream for cacheManagerConfigFile [" + configFile + "]", e);
} finally {
IOUtils.closeQuietly(inputStream);
}
}
@Bean(name = "casRealm")
public ShiroCasUserRealm casRealm(@Value("${shiro.casServerUrlPrefix}") String casServerUrlPrefix,
@Value("${shiro.shiroServerUrlPrefix}") String shiroServerUrlPrefix,
@Value("${shiro.casFilterUrlPattern}") String casFilterUrlPattern,
EhCacheManager cacheManager) {
ShiroCasUserRealm casRealm = new ShiroCasUserRealm();
// 认证通过后的默认角色
casRealm.setDefaultRoles("ROLE_USER");
// cas服务端地址前缀
casRealm.setCasServerUrlPrefix(casServerUrlPrefix);
// 应用服务地址,用来接收cas服务端票证
casRealm.setCasService(shiroServerUrlPrefix + casFilterUrlPattern);
casRealm.setCacheManager(cacheManager);
return casRealm;
}
//package com.zdxt.auth.framework.config;
//
//import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;
//import com.zdxt.auth.common.utils.StringUtils;
//import com.zdxt.auth.framework.shiro.realm.ShiroCasUserRealm;
//import com.zdxt.auth.framework.shiro.session.OnlineSessionFactory;
//import com.zdxt.auth.framework.shiro.web.filter.CasFilter;
//import com.zdxt.auth.framework.shiro.web.session.OnlineWebSessionManager;
//import com.zdxt.auth.framework.shiro.web.session.SpringSessionValidationScheduler;
//import com.zdxt.common.util.SpringUtils;
//import org.apache.commons.io.IOUtils;
//import org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy;
//import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
//import org.apache.shiro.cache.MemoryConstrainedCacheManager;
//import org.apache.shiro.cache.ehcache.EhCacheManager;
//import org.apache.shiro.cas.CasSubjectFactory;
//import org.apache.shiro.config.ConfigurationException;
////import org.apache.shiro.io.ResourceUtils;
//import org.apache.shiro.lang.io.ResourceUtils;
//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.filter.authc.LogoutFilter;
//import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
//import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.boot.web.servlet.FilterRegistrationBean;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Profile;
//import org.springframework.web.filter.DelegatingFilterProxy;
//
//import javax.servlet.Filter;
//import java.io.ByteArrayInputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.util.HashMap;
//import java.util.LinkedHashMap;
//import java.util.Map;
//
///**
// * Shiro和Cas的整合配置文件
// *
// * @author: QingWang.Li
// * @date: 2020/5/13 14:49
// */
//// 启用cas环境时生效,环境切换在application.yml中配置
//@Profile("cas")
//@Configuration
//public class ShiroCasConfiguration {
//
// // Session超时时间,单位为毫秒(默认30分钟)
// @Value("${shiro.session.expireTime}")
// private int expireTime;
//
// // 设置Cookie的域名
// @Value("${shiro.cookie.domain}")
// private String domain;
//
// // 设置cookie的有效访问路径
// @Value("${shiro.cookie.path}")
// private String path;
//
// // 设置HttpOnly属性
// @Value("${shiro.cookie.httpOnly}")
// private boolean httpOnly;
//
// // 设置Cookie的过期时间,秒为单位
// @Value("${shiro.cookie.maxAge}")
// private int maxAge;
//
// // 登录地址
// @Value("${shiro.casLoginUrl}")
// private String loginUrl;
//
// /**
// * 自定义sessionDAO会话
// * 缓存管理器 使用Ehcache实现
// */
// @Bean
// public OnlineSessionDAO sessionDAO() {
// OnlineSessionDAO sessionDAO = new OnlineSessionDAO();
// return sessionDAO;
// public EhCacheManager getEhCacheManager() {
// net.sf.ehcache.CacheManager cacheManager = net.sf.ehcache.CacheManager.getCacheManager("ruoyi");
// EhCacheManager em = new EhCacheManager();
// if (StringUtils.isNull(cacheManager)) {
// em.setCacheManager(new net.sf.ehcache.CacheManager(getCacheManagerConfigFileInputStream()));
// return em;
// } else {
// em.setCacheManager(cacheManager);
// return em;
// }
// }
/**
* 自定义sessionFactory会话
*/
@Bean
public OnlineSessionFactory sessionFactory() {
OnlineSessionFactory sessionFactory = new OnlineSessionFactory();
return sessionFactory;
}
//
// /**
// * 会话管理器
// * 返回配置文件流 避免ehcache配置文件一直被占用,无法完全销毁项目重新部署
// */
// protected InputStream getCacheManagerConfigFileInputStream() {
// String configFile = "classpath:ehcache/ehcache-shiro.xml";
// InputStream inputStream = null;
// try {
// inputStream = ResourceUtils.getInputStreamForPath(configFile);
// byte[] b = IOUtils.toByteArray(inputStream);
// InputStream in = new ByteArrayInputStream(b);
// return in;
// } catch (IOException e) {
// throw new ConfigurationException(
// "Unable to obtain input stream for cacheManagerConfigFile [" + configFile + "]", e);
// } finally {
// IOUtils.closeQuietly(inputStream);
// }
// }
//
// @Bean(name = "casRealm")
// public ShiroCasUserRealm casRealm(@Value("${shiro.casServerUrlPrefix}") String casServerUrlPrefix,
// @Value("${shiro.shiroServerUrlPrefix}") String shiroServerUrlPrefix,
// @Value("${shiro.casFilterUrlPattern}") String casFilterUrlPattern,
// EhCacheManager cacheManager) {
// ShiroCasUserRealm casRealm = new ShiroCasUserRealm();
// // 认证通过后的默认角色
// casRealm.setDefaultRoles("ROLE_USER");
// // cas服务端地址前缀
// casRealm.setCasServerUrlPrefix(casServerUrlPrefix);
// // 应用服务地址,用来接收cas服务端票证
// casRealm.setCasService(shiroServerUrlPrefix + casFilterUrlPattern);
//
// casRealm.setCacheManager(cacheManager);
// return casRealm;
// }
//
//// /**
//// * 自定义sessionDAO会话
//// */
//// @Bean
//// public OnlineSessionDAO sessionDAO() {
//// OnlineSessionDAO sessionDAO = new OnlineSessionDAO();
//// return sessionDAO;
//// }
//
// /**
// * 自定义sessionFactory会话
// */
// @Bean
// public OnlineSessionFactory sessionFactory() {
// OnlineSessionFactory sessionFactory = new OnlineSessionFactory();
// return sessionFactory;
// }
//
//// /**
//// * 会话管理器
//// */
//// @Bean
//// public OnlineWebSessionManager sessionManager() {
//// OnlineWebSessionManager manager = new OnlineWebSessionManager();
//// // 加入缓存管理器
//// manager.setCacheManager(getEhCacheManager());
//// // 删除过期的session
//// manager.setDeleteInvalidSessions(true);
//// // 设置全局session超时时间
//// manager.setGlobalSessionTimeout(expireTime * 60 * 1000);
//// // 去掉 JSESSIONID
//// manager.setSessionIdUrlRewritingEnabled(false);
//// // 定义要使用的无效的Session定时调度器
//// manager.setSessionValidationScheduler(SpringUtils.getBean(SpringSessionValidationScheduler.class));
//// // 是否定时检查session
//// manager.setSessionValidationSchedulerEnabled(true);
//// // 自定义SessionDao
//// manager.setSessionDAO(sessionDAO());
//// // 自定义sessionFactory
//// manager.setSessionFactory(sessionFactory());
//// return manager;
//// }
//
// /**
// * 配置安全管理器
// **/
// @Bean(name = "securityManager")
// public DefaultWebSecurityManager defaultWebSecurityManager(ModularRealmAuthenticator authenticator,
// ShiroCasUserRealm casRealm) {
// DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// // 设置授权策略,此步骤必须在设置realm的前面,不然会报错realm未配置
// securityManager.setAuthenticator(authenticator);
// securityManager.setSubjectFactory(new CasSubjectFactory());
//
// // 缓存管理器
// securityManager.setCacheManager(new MemoryConstrainedCacheManager());
// // 设置自定义验证策略
// securityManager.setRealm(casRealm);
//
// return securityManager;
// }
//
// /**
// * 退出过滤器
// */
// public com.zdxt.auth.framework.shiro.web.filter.LogoutFilter logoutFilter() {
// com.zdxt.auth.framework.shiro.web.filter.LogoutFilter logoutFilter = new com.zdxt.auth.framework.shiro.web.filter.LogoutFilter();
// logoutFilter.setCacheManager(getEhCacheManager());
// logoutFilter.setLoginUrl(loginUrl);
// return logoutFilter;
// }
//
// /**
// * 配置登录过滤器
// */
// @Bean(name = "casFilter")
// public CasFilter casFilter(@Value("${shiro.casLoginUrl}") String loginUrl) {
// CasFilter casFilter = new CasFilter();
// casFilter.setName("casFilter");
// casFilter.setEnabled(true);
// casFilter.setFailureUrl(loginUrl);
// return casFilter;
// }
//
// /**
// * shiro 过滤器
// */
// @Bean(name = "shiroFilter")
// public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager securityManager,
// CasFilter casFilter,
// @Value("${shiro.casLogoutUrl}") String logoutUrl,
// @Value("${shiro.casLoginUrl}") String loginUrl,
// @Value("${shiro.casFilterUrlPattern}") String casFilterUrlPattern) {
// ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// // 设置安全管理器
// shiroFilterFactoryBean.setSecurityManager(securityManager);
// // 设置登录地址
// shiroFilterFactoryBean.setLoginUrl(loginUrl);
// // 设置登录成功地址
// shiroFilterFactoryBean.setSuccessUrl("/");
// // 配置拦截地址
// Map<String, Filter> filters = new HashMap<>();
// filters.put("casFilter", casFilter);
//
// // 配置登出地址 5.0版本和3.0版本
// LogoutFilter logoutFilter = new LogoutFilter();
// logoutFilter.setRedirectUrl(logoutUrl);
// filters.put("logout", logoutFilter);
//
// // 注销成功,则跳转到指定页面 4.0版本
// // filters.put("logout", logoutFilter());
//
// shiroFilterFactoryBean.setFilters(filters);
// // 设置访问用户页面需要授权的操作
// loadShiroFilterChain(shiroFilterFactoryBean, casFilterUrlPattern);
// // 将设置的权限设置到shiroFilterFactoryBean
// return shiroFilterFactoryBean;
// }
//
// /**
// * 1、当我们第一次访问客户端时,先去cas进行认证,成功后会返回一个ticket
// * 2、返回的ticket地址在casRealm已经进行了配置,shiroServerUrlPrefix + casFilterUrlPattern
// * 3、即地址为/shiro-cas,对该地址进行casFilter拦截
// */
// private void loadShiroFilterChain(ShiroFilterFactoryBean shiroFilterFactoryBean, String casFilterUrlPattern) {
// Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
//
// filterChainDefinitionMap.put(casFilterUrlPattern, "casFilter");
//
// // 对静态资源设置匿名访问
// filterChainDefinitionMap.put("/favicon.ico**", "anon");
// filterChainDefinitionMap.put("/ruoyi.png**", "anon");
// filterChainDefinitionMap.put("/css/**", "anon");
// filterChainDefinitionMap.put("/docs/**", "anon");
// filterChainDefinitionMap.put("/fonts/**", "anon");
// filterChainDefinitionMap.put("/img/**", "anon");
// filterChainDefinitionMap.put("/ajax/**", "anon");
// filterChainDefinitionMap.put("/js/**", "anon");
// filterChainDefinitionMap.put("/ruoyi/**", "anon");
// // 附件访问不拦截
// filterChainDefinitionMap.put("/profile/**", "anon");
// // 不拦截app登录
// filterChainDefinitionMap.put("/appAjaxLogin", "anon");
// filterChainDefinitionMap.put("/app/appLogin", "anon");
// filterChainDefinitionMap.put("/app/**", "anon");
// // 金蝶同步数据不拦截
// filterChainDefinitionMap.put("/kingdee/dataSync/**", "anon");
// filterChainDefinitionMap.put("/captcha/captchaImage**", "anon");
//
// // 对外开放的controller不拦截
// filterChainDefinitionMap.put("/external/**", "anon");
//
// // 退出 logout地址,shiro去清除session
// filterChainDefinitionMap.put("/logout", "logout");
// filterChainDefinitionMap.put("/**", "authc");
//
// shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
// }
//
// /**
// * 添加shiro的filter
// */
// @Bean
// public FilterRegistrationBean filterRegistrationBean() {
// FilterRegistrationBean filterRegistration = new FilterRegistrationBean();
// filterRegistration.setFilter(new DelegatingFilterProxy("shiroFilter"));
// filterRegistration.addInitParameter("targetFilterLifecycle", "true");
// filterRegistration.setEnabled(true);
// filterRegistration.addUrlPatterns("/*");
// return filterRegistration;
// }
//
// /**
// * 保证了shiro内部lifecycle函数bean的执行
// */
// @Bean(name = "lifecycleBeanPostProcessor")
// public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
// return new LifecycleBeanPostProcessor();
// }
//
// /**
// * 配置授权策略
// */
// @Bean(name = "authenticator")
// public ModularRealmAuthenticator modularRealmAuthenticator() {
// ModularRealmAuthenticator authenticator = new ModularRealmAuthenticator();
// authenticator.setAuthenticationStrategy(new AtLeastOneSuccessfulStrategy());
// return authenticator;
// }
//
// /**
// * 开启Shiro的注解(如@RequiresPermissions)
// * 需借助SpringAOP扫描使用Shiro注解的类
// * 配置以下两个bean(DefaultAdvisorAutoProxyCreator和AuthorizationAttributeSourceAdvisor)即可实现此功能
// *
// * @return
// */
// @Bean
// public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {
// DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
// advisorAutoProxyCreator.setProxyTargetClass(true);
// return advisorAutoProxyCreator;
// }
//
// /**
// * 开启aop注解支持
// *
// * @param securityManager
// * @return
// */
// @Bean
// public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
// AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
// authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
// return authorizationAttributeSourceAdvisor;
// }
//
// /**
// * thymeleaf模板引擎和shiro框架的整合
// */
// @Bean
// public OnlineWebSessionManager sessionManager() {
// OnlineWebSessionManager manager = new OnlineWebSessionManager();
// // 加入缓存管理器
// manager.setCacheManager(getEhCacheManager());
// // 删除过期的session
// manager.setDeleteInvalidSessions(true);
// // 设置全局session超时时间
// manager.setGlobalSessionTimeout(expireTime * 60 * 1000);
// // 去掉 JSESSIONID
// manager.setSessionIdUrlRewritingEnabled(false);
// // 定义要使用的无效的Session定时调度器
// manager.setSessionValidationScheduler(SpringUtils.getBean(SpringSessionValidationScheduler.class));
// // 是否定时检查session
// manager.setSessionValidationSchedulerEnabled(true);
// // 自定义SessionDao
// manager.setSessionDAO(sessionDAO());
// // 自定义sessionFactory
// manager.setSessionFactory(sessionFactory());
// return manager;
// public ShiroDialect shiroDialect() {
// return new ShiroDialect();
// }
/**
* 配置安全管理器
**/
@Bean(name = "securityManager")
public DefaultWebSecurityManager defaultWebSecurityManager(ModularRealmAuthenticator authenticator,
ShiroCasUserRealm casRealm) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// 设置授权策略,此步骤必须在设置realm的前面,不然会报错realm未配置
securityManager.setAuthenticator(authenticator);
securityManager.setSubjectFactory(new CasSubjectFactory());
// 缓存管理器
securityManager.setCacheManager(new MemoryConstrainedCacheManager());
// 设置自定义验证策略
securityManager.setRealm(casRealm);
return securityManager;
}
/**
* 退出过滤器
*/
public com.zdxt.auth.framework.shiro.web.filter.LogoutFilter logoutFilter() {
com.zdxt.auth.framework.shiro.web.filter.LogoutFilter logoutFilter = new com.zdxt.auth.framework.shiro.web.filter.LogoutFilter();
logoutFilter.setCacheManager(getEhCacheManager());
logoutFilter.setLoginUrl(loginUrl);
return logoutFilter;
}
/**
* 配置登录过滤器
*/
@Bean(name = "casFilter")
public CasFilter casFilter(@Value("${shiro.casLoginUrl}") String loginUrl) {
CasFilter casFilter = new CasFilter();
casFilter.setName("casFilter");
casFilter.setEnabled(true);
casFilter.setFailureUrl(loginUrl);
return casFilter;
}
/**
* shiro 过滤器
*/
@Bean(name = "shiroFilter")
public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager securityManager,
CasFilter casFilter,
@Value("${shiro.casLogoutUrl}") String logoutUrl,
@Value("${shiro.casLoginUrl}") String loginUrl,
@Value("${shiro.casFilterUrlPattern}") String casFilterUrlPattern) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// 设置安全管理器
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 设置登录地址
shiroFilterFactoryBean.setLoginUrl(loginUrl);
// 设置登录成功地址
shiroFilterFactoryBean.setSuccessUrl("/");
// 配置拦截地址
Map<String, Filter> filters = new HashMap<>();
filters.put("casFilter", casFilter);
// 配置登出地址 5.0版本和3.0版本
LogoutFilter logoutFilter = new LogoutFilter();
logoutFilter.setRedirectUrl(logoutUrl);
filters.put("logout", logoutFilter);
// 注销成功,则跳转到指定页面 4.0版本
// filters.put("logout", logoutFilter());
shiroFilterFactoryBean.setFilters(filters);
// 设置访问用户页面需要授权的操作
loadShiroFilterChain(shiroFilterFactoryBean, casFilterUrlPattern);
// 将设置的权限设置到shiroFilterFactoryBean
return shiroFilterFactoryBean;
}
/**
* 1、当我们第一次访问客户端时,先去cas进行认证,成功后会返回一个ticket
* 2、返回的ticket地址在casRealm已经进行了配置,shiroServerUrlPrefix + casFilterUrlPattern
* 3、即地址为/shiro-cas,对该地址进行casFilter拦截
*/
private void loadShiroFilterChain(ShiroFilterFactoryBean shiroFilterFactoryBean, String casFilterUrlPattern) {
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put(casFilterUrlPattern, "casFilter");
// 对静态资源设置匿名访问
filterChainDefinitionMap.put("/favicon.ico**", "anon");
filterChainDefinitionMap.put("/ruoyi.png**", "anon");
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/docs/**", "anon");
filterChainDefinitionMap.put("/fonts/**", "anon");
filterChainDefinitionMap.put("/img/**", "anon");
filterChainDefinitionMap.put("/ajax/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/ruoyi/**", "anon");
// 附件访问不拦截
filterChainDefinitionMap.put("/profile/**", "anon");
// 不拦截app登录
filterChainDefinitionMap.put("/appAjaxLogin", "anon");
filterChainDefinitionMap.put("/app/appLogin", "anon");
filterChainDefinitionMap.put("/app/**", "anon");
// 金蝶同步数据不拦截
filterChainDefinitionMap.put("/kingdee/dataSync/**", "anon");
filterChainDefinitionMap.put("/captcha/captchaImage**", "anon");
// 对外开放的controller不拦截
filterChainDefinitionMap.put("/external/**", "anon");
// 退出 logout地址,shiro去清除session
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/**", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
}
/**
* 添加shiro的filter
*/
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistration = new FilterRegistrationBean();
filterRegistration.setFilter(new DelegatingFilterProxy("shiroFilter"));
filterRegistration.addInitParameter("targetFilterLifecycle", "true");
filterRegistration.setEnabled(true);
filterRegistration.addUrlPatterns("/*");
return filterRegistration;
}
/**
* 保证了shiro内部lifecycle函数bean的执行
*/
@Bean(name = "lifecycleBeanPostProcessor")
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor();
}
/**
* 配置授权策略
*/
@Bean(name = "authenticator")
public ModularRealmAuthenticator modularRealmAuthenticator() {
ModularRealmAuthenticator authenticator = new ModularRealmAuthenticator();
authenticator.setAuthenticationStrategy(new AtLeastOneSuccessfulStrategy());
return authenticator;
}
/**
* 开启Shiro的注解(如@RequiresPermissions)
* 需借助SpringAOP扫描使用Shiro注解的类
* 配置以下两个bean(DefaultAdvisorAutoProxyCreator和AuthorizationAttributeSourceAdvisor)即可实现此功能
*
* @return
*/
@Bean
public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {
DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
advisorAutoProxyCreator.setProxyTargetClass(true);
return advisorAutoProxyCreator;
}
/**
* 开启aop注解支持
*
* @param securityManager
* @return
*/
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}
/**
* thymeleaf模板引擎和shiro框架的整合
*/
@Bean
public ShiroDialect shiroDialect() {
return new ShiroDialect();
}
}
//
//}

23
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/ShiroConfig.java

@ -1,6 +1,7 @@
package com.zdxt.auth.framework.config;
import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;
import com.zdxt.auth.common.utils.CipherKeyUtil;
import com.zdxt.auth.common.utils.StringUtils;
import com.zdxt.auth.framework.shiro.realm.UserRealm;
import com.zdxt.auth.framework.shiro.web.filter.LogoutFilter;
@ -8,6 +9,7 @@ import com.zdxt.auth.framework.shiro.web.filter.captcha.CaptchaValidateFilter;
import com.zdxt.auth.framework.shiro.web.filter.kickout.KickoutSessionFilter;
import com.zdxt.common.util.CipherUtils;
import com.zdxt.common.util.Constants;
//import org.apache.shiro.lang.codec.Base64;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.mgt.SessionManager;
@ -27,6 +29,8 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.servlet.Filter;
import java.util.LinkedHashMap;
@ -354,18 +358,19 @@ public class ShiroConfig {
/**
* 记住我
*/
public CookieRememberMeManager rememberMeManager()
{
public CookieRememberMeManager rememberMeManager() {
CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
cookieRememberMeManager.setCookie(rememberMeCookie());
if (StringUtils.isNotEmpty(cipherKey))
{
cookieRememberMeManager.setCipherKey(Base64.decode(cipherKey));
}
else
{
cookieRememberMeManager.setCipherKey(CipherUtils.generateNewKey(128, "AES").getEncoded());
try {
KeyGenerator keygen = KeyGenerator.getInstance("AES");
SecretKey deskey = keygen.generateKey();
String value = Base64.encodeToString(deskey.getEncoded());
cookieRememberMeManager.setCipherKey(Base64.decode(value));
// cookieRememberMeManager.setCipherKey(Base64.decode(cipherKey));
} catch(Exception e) {
}
// cookieRememberMeManager.setCipherKey(Base64.decode("fCq+/xW488hMTCD+cmJ3aQ=="));
return cookieRememberMeManager;
}

324
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/realm/ShiroCasUserRealm.java

@ -1,162 +1,162 @@
package com.zdxt.auth.framework.shiro.realm;
import cn.hutool.core.bean.BeanUtil;
import com.zdxt.auth.common.exception.user.*;
import com.zdxt.auth.common.utils.security.ShiroUtils;
import com.zdxt.auth.framework.shiro.service.LoginService;
import com.zdxt.auth.project.system.menu.service.IMenuService;
import com.zdxt.auth.project.system.role.service.IRoleService;
import com.zdxt.auth.project.system.user.mapper.UserMapper;
import com.zdxt.domain.auth.User;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.cas.CasRealm;
import org.apache.shiro.cas.CasToken;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.SimplePrincipalCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.HashSet;
import java.util.Set;
/**
* shiro和cas整合的Realm 处理登录 权限
* @author: QingWang.Li
* @date: 2020/5/13 14:17
*/
public class ShiroCasUserRealm extends CasRealm implements ZdxtUserRealm {
private static Logger log = LoggerFactory.getLogger(ShiroCasUserRealm.class);
@Autowired
private IMenuService menuService;
@Autowired
private IRoleService roleService;
@Autowired
private LoginService loginService;
@Autowired
private UserMapper userMapper;
/**
* 在调用subject.login()时,首先调用此接口
*/
@Override
public AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
// 调用父类的方法,然后授权用户
AuthenticationInfo authc = super.doGetAuthenticationInfo(token);
// 获得用户名
String username = (String) authc.getPrincipals().getPrimaryPrincipal();
// 获取ticket
CasToken casToken = (CasToken) token;
String ticket = (String) casToken.getCredentials();
if(ticket!=null&&!ticket.equals("")){
// 从数据库中获取用户信息
User user = userMapper.selectUserByLoginName(username);
if (BeanUtil.isNotEmpty(user)) {
PrincipalCollection principalCollection = new SimplePrincipalCollection(user, getName());
// 返回携带用户信息和ticket的信息对象
return new SimpleAuthenticationInfo(principalCollection, ticket);
}
return null;
}else{
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
String username1 = upToken.getUsername();
String password = "";
if (upToken.getPassword() != null)
{
password = new String(upToken.getPassword());
}
User user = null;
try
{
user = loginService.login(username1, password);
}
catch (CaptchaException e)
{
throw new AuthenticationException(e.getMessage(), e);
}
catch (UserNotExistsException e)
{
throw new UnknownAccountException(e.getMessage(), e);
}
catch (UserPasswordNotMatchException e)
{
throw new IncorrectCredentialsException(e.getMessage(), e);
}
catch (UserPasswordRetryLimitExceedException e)
{
throw new ExcessiveAttemptsException(e.getMessage(), e);
}
catch (UserBlockedException e)
{
throw new LockedAccountException(e.getMessage(), e);
}
catch (RoleBlockedException e)
{
throw new LockedAccountException(e.getMessage(), e);
}
catch (Exception e)
{
log.info("对用户[" + username + "]进行登录验证..验证未通过{}", e.getMessage());
throw new AuthenticationException(e.getMessage(), e);
}
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password, getName());
return info;
}
}
/**
* 进行权限验证的时候,调用方法,将用户的权限信息写进SimpleAuthorizationInfo
*/
@Override
public AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// 用户名称
log.info("进入了权限认证");
Object username = principals.getPrimaryPrincipal();
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
// 从数据库获取用户权限
// 简单例子
// Set<String> permission = new HashSet<>();
// permission.add("sys:dept:list");
// info.setStringPermissions(permission);
User user = ShiroUtils.getSysUser();
// 角色列表
Set<String> roles = new HashSet<String>();
// 功能列表
Set<String> menus = new HashSet<String>();
// 管理员拥有所有权限
if (user.isAdmin()) {
info.addRole("admin");
info.addStringPermission("*:*:*");
} else {
roles = roleService.selectRoleKeys(user.getUserId());
menus = menuService.selectPermsByUserId(user.getUserId());
// 角色加入AuthorizationInfo认证对象
info.setRoles(roles);
// 权限加入AuthorizationInfo认证对象
info.setStringPermissions(menus);
}
return info;
}
/**
* 清理缓存权限
*/
@Override
public void clearCachedAuthorizationInfo()
{
this.clearCachedAuthorizationInfo(SecurityUtils.getSubject().getPrincipals());
}
}
//package com.zdxt.auth.framework.shiro.realm;
//
//import cn.hutool.core.bean.BeanUtil;
//import com.zdxt.auth.common.exception.user.*;
//import com.zdxt.auth.common.utils.security.ShiroUtils;
//import com.zdxt.auth.framework.shiro.service.LoginService;
//import com.zdxt.auth.project.system.menu.service.IMenuService;
//import com.zdxt.auth.project.system.role.service.IRoleService;
//import com.zdxt.auth.project.system.user.mapper.UserMapper;
//import com.zdxt.domain.auth.User;
//import org.apache.shiro.SecurityUtils;
//import org.apache.shiro.authc.*;
//import org.apache.shiro.authz.AuthorizationInfo;
//import org.apache.shiro.authz.SimpleAuthorizationInfo;
//import org.apache.shiro.cas.CasRealm;
//import org.apache.shiro.cas.CasToken;
//import org.apache.shiro.subject.PrincipalCollection;
//import org.apache.shiro.subject.SimplePrincipalCollection;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//
//import java.util.HashSet;
//import java.util.Set;
//
///**
// * shiro和cas整合的Realm 处理登录 权限
// * @author: QingWang.Li
// * @date: 2020/5/13 14:17
// */
//public class ShiroCasUserRealm extends CasRealm implements ZdxtUserRealm {
// private static Logger log = LoggerFactory.getLogger(ShiroCasUserRealm.class);
//
// @Autowired
// private IMenuService menuService;
//
// @Autowired
// private IRoleService roleService;
//
// @Autowired
// private LoginService loginService;
//
// @Autowired
// private UserMapper userMapper;
//
// /**
// * 在调用subject.login()时,首先调用此接口
// */
// @Override
// public AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
// // 调用父类的方法,然后授权用户
// AuthenticationInfo authc = super.doGetAuthenticationInfo(token);
// // 获得用户名
// String username = (String) authc.getPrincipals().getPrimaryPrincipal();
//
// // 获取ticket
// CasToken casToken = (CasToken) token;
// String ticket = (String) casToken.getCredentials();
// if(ticket!=null&&!ticket.equals("")){
// // 从数据库中获取用户信息
// User user = userMapper.selectUserByLoginName(username);
// if (BeanUtil.isNotEmpty(user)) {
// PrincipalCollection principalCollection = new SimplePrincipalCollection(user, getName());
//
// // 返回携带用户信息和ticket的信息对象
// return new SimpleAuthenticationInfo(principalCollection, ticket);
// }
// return null;
// }else{
// UsernamePasswordToken upToken = (UsernamePasswordToken) token;
// String username1 = upToken.getUsername();
// String password = "";
// if (upToken.getPassword() != null)
// {
// password = new String(upToken.getPassword());
// }
//
// User user = null;
// try
// {
// user = loginService.login(username1, password);
// }
// catch (CaptchaException e)
// {
// throw new AuthenticationException(e.getMessage(), e);
// }
// catch (UserNotExistsException e)
// {
// throw new UnknownAccountException(e.getMessage(), e);
// }
// catch (UserPasswordNotMatchException e)
// {
// throw new IncorrectCredentialsException(e.getMessage(), e);
// }
// catch (UserPasswordRetryLimitExceedException e)
// {
// throw new ExcessiveAttemptsException(e.getMessage(), e);
// }
// catch (UserBlockedException e)
// {
// throw new LockedAccountException(e.getMessage(), e);
// }
// catch (RoleBlockedException e)
// {
// throw new LockedAccountException(e.getMessage(), e);
// }
// catch (Exception e)
// {
// log.info("对用户[" + username + "]进行登录验证..验证未通过{}", e.getMessage());
// throw new AuthenticationException(e.getMessage(), e);
// }
// SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password, getName());
// return info;
// }
//
// }
//
// /**
// * 进行权限验证的时候,调用方法,将用户的权限信息写进SimpleAuthorizationInfo
// */
// @Override
// public AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// // 用户名称
// log.info("进入了权限认证");
// Object username = principals.getPrimaryPrincipal();
// SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
// // 从数据库获取用户权限
//
// // 简单例子
// // Set<String> permission = new HashSet<>();
// // permission.add("sys:dept:list");
// // info.setStringPermissions(permission);
//
// User user = ShiroUtils.getSysUser();
// // 角色列表
// Set<String> roles = new HashSet<String>();
// // 功能列表
// Set<String> menus = new HashSet<String>();
// // 管理员拥有所有权限
// if (user.isAdmin()) {
// info.addRole("admin");
// info.addStringPermission("*:*:*");
// } else {
// roles = roleService.selectRoleKeys(user.getUserId());
// menus = menuService.selectPermsByUserId(user.getUserId());
// // 角色加入AuthorizationInfo认证对象
// info.setRoles(roles);
// // 权限加入AuthorizationInfo认证对象
// info.setStringPermissions(menus);
// }
// return info;
// }
//
// /**
// * 清理缓存权限
// */
// @Override
// public void clearCachedAuthorizationInfo()
// {
// this.clearCachedAuthorizationInfo(SecurityUtils.getSubject().getPrincipals());
// }
//}

8
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/service/PasswordService.java

@ -7,10 +7,12 @@ import com.zdxt.auth.common.exception.user.UserPasswordRetryLimitExceedException
import com.zdxt.auth.common.utils.MessageUtils;
import com.zdxt.auth.framework.manager.AsyncManager;
import com.zdxt.auth.framework.manager.factory.AsyncFactory;
import com.zdxt.common.util.Md5Hash;
import com.zdxt.domain.auth.User;
import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheManager;
import org.apache.shiro.crypto.hash.Md5Hash;
//import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@ -70,7 +72,9 @@ public class PasswordService {
}
public String encryptPassword(String username, String password, String salt) {
return new Md5Hash(username + password + salt).toHex().toString();
// return new SimpleHash(username + password + salt).toHex().toString();
return new Md5Hash(username + password + salt).toHex();
}
public void unlock(String loginName) {

146
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/web/filter/CasFilter.java

@ -1,73 +1,73 @@
package com.zdxt.auth.framework.shiro.web.filter;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.cas.CasToken;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
/**
* cas单点登录过滤器
*
* @author: QingWang.Li
* @date: 2020/5/14 9:13
*/
public class CasFilter extends org.apache.shiro.cas.CasFilter {
private static Logger logger = LoggerFactory.getLogger(CasFilter.class);
private static final String TICKET_PARAMETER = "ticket";
public CasFilter() {
}
@Override
public AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception {
// 获取请求的ticket
HttpServletRequest httpRequest = (HttpServletRequest) request;
String ticket = getRequestTicket(httpRequest);
if (StringUtils.isEmpty(ticket)) {
logger.debug("票证获取失败,票证为空!");
return null;
}
return new CasToken(ticket);
}
/**
* 拒绝除了option以外的所有请求
**/
@Override
public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
if (((HttpServletRequest) request).getMethod().equals(RequestMethod.OPTIONS.name())) {
return true;
}
return false;
}
@Override
public boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
// 获取ticket,如果不存在,直接返回false
String ticket = getRequestTicket((HttpServletRequest) request);
if (StringUtils.isEmpty(ticket)) {
return false;
}
return this.executeLogin(request, response);
}
/**
* 获取请求的ticket
*/
private String getRequestTicket(HttpServletRequest httpRequest) {
// 从参数中获取ticket
String ticket = httpRequest.getParameter(TICKET_PARAMETER);
if (StringUtils.isEmpty(ticket)) {
// 如果为空的话,则从header中获取参数
ticket = httpRequest.getHeader(TICKET_PARAMETER);
}
return ticket;
}
}
//package com.zdxt.auth.framework.shiro.web.filter;
//
//import org.apache.shiro.authc.AuthenticationToken;
//import org.apache.shiro.cas.CasToken;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.util.StringUtils;
//import org.springframework.web.bind.annotation.RequestMethod;
//
//import javax.servlet.ServletRequest;
//import javax.servlet.ServletResponse;
//import javax.servlet.http.HttpServletRequest;
//
///**
// * cas单点登录过滤器
// *
// * @author: QingWang.Li
// * @date: 2020/5/14 9:13
// */
//public class CasFilter extends org.apache.shiro.cas.CasFilter {
// private static Logger logger = LoggerFactory.getLogger(CasFilter.class);
// private static final String TICKET_PARAMETER = "ticket";
//
// public CasFilter() {
// }
//
// @Override
// public AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception {
// // 获取请求的ticket
// HttpServletRequest httpRequest = (HttpServletRequest) request;
// String ticket = getRequestTicket(httpRequest);
// if (StringUtils.isEmpty(ticket)) {
// logger.debug("票证获取失败,票证为空!");
// return null;
// }
// return new CasToken(ticket);
// }
//
// /**
// * 拒绝除了option以外的所有请求
// **/
// @Override
// public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
// if (((HttpServletRequest) request).getMethod().equals(RequestMethod.OPTIONS.name())) {
// return true;
// }
// return false;
// }
//
// @Override
// public boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
// // 获取ticket,如果不存在,直接返回false
// String ticket = getRequestTicket((HttpServletRequest) request);
// if (StringUtils.isEmpty(ticket)) {
// return false;
// }
// return this.executeLogin(request, response);
// }
//
// /**
// * 获取请求的ticket
// */
// private String getRequestTicket(HttpServletRequest httpRequest) {
// // 从参数中获取ticket
// String ticket = httpRequest.getParameter(TICKET_PARAMETER);
// if (StringUtils.isEmpty(ticket)) {
// // 如果为空的话,则从header中获取参数
// ticket = httpRequest.getHeader(TICKET_PARAMETER);
// }
// return ticket;
// }
//
//}

7
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/web/filter/LogoutFilter.java

@ -1,7 +1,6 @@
package com.zdxt.auth.framework.shiro.web.filter;
import java.io.Serializable;
import java.net.URLEncoder;
import java.util.Deque;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
@ -24,11 +23,9 @@ import com.zdxt.auth.common.utils.StringUtils;
import com.zdxt.auth.common.utils.security.ShiroUtils;
import com.zdxt.auth.framework.manager.AsyncManager;
import com.zdxt.auth.framework.manager.factory.AsyncFactory;
import org.slw.sso.client.SsoClient;
import org.slw.sso.config.SsoConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* 退出过滤器

4
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/controller/LoginController.java

@ -96,6 +96,8 @@ public class LoginController extends BaseController
secretKey = AesHelper.desEncrypt(secretKey);
// UsernamePasswordToken token = new UsernamePasswordToken(username, password, false);
UserToken token = new UserToken(secretName, secretKey, LoginType.PASSWORD);
//禁止使用rememberMe
token.setRememberMe(false);
Subject subject = SecurityUtils.getSubject();
try {
if ("1".equals(type)) { //APP
@ -186,6 +188,8 @@ public class LoginController extends BaseController
loginDTO.setSecretKey(AesHelper.desEncrypt(loginDTO.getSecretKey()));
// UsernamePasswordToken token = new UsernamePasswordToken(username, password, false);
UserToken token = new UserToken(loginDTO.getSecretName(), loginDTO.getSecretKey(), LoginType.PASSWORD);
//禁止使用rememberMe
token.setRememberMe(false);
Subject subject = SecurityUtils.getSubject();
try {
//PC

1
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/service/UserServiceImpl.java

@ -30,7 +30,6 @@ import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

20
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/static/ajax/libs/jquery-layout/jquery-ui-latest.js

@ -147,7 +147,7 @@ function focusable( element, isTabIndexNotNaN ) {
function visible( element ) {
return $.expr.filters.visible( element ) &&
!$( element ).parents().andSelf().filter(function() {
!$( element ).parents().addBack().filter(function() {
return $.css( this, "visibility" ) === "hidden";
}).length;
}
@ -6153,7 +6153,7 @@ $.widget("ui.draggable", $.ui.mouse, {
var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
$(this.options.handle, this.element)
.find("*")
.andSelf()
.addBack()
.each(function() {
if(this == event.target) handle = true;
});
@ -6913,7 +6913,7 @@ $.ui.ddmanager = {
var m = $.ui.ddmanager.droppables[t.options.scope] || [];
var type = event ? event.type : null; // workaround for #2317
var list = (t.currentItem || t.element).find(":data(droppable)").andSelf();
var list = (t.currentItem || t.element).find(":data(droppable)").addBack();
droppablesLoop: for (var i = 0; i < m.length; i++) {
@ -7756,7 +7756,7 @@ $.effects.animateClass = function( value, duration, easing, callback ) {
var animated = $( this ),
baseClass = animated.attr( "class" ) || "",
applyClassChange,
allAnimations = o.children ? animated.find( "*" ).andSelf() : animated;
allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
// map the animated objects to store the original styles.
allAnimations = allAnimations.map(function() {
@ -9377,7 +9377,7 @@ $.widget( "ui.menu", {
// Destroy (sub)menus
this.element
.removeAttr( "aria-activedescendant" )
.find( ".ui-menu" ).andSelf()
.find( ".ui-menu" ).addBack()
.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
.removeAttr( "role" )
.removeAttr( "tabIndex" )
@ -10823,7 +10823,7 @@ $.widget("ui.selectable", $.ui.mouse, {
}
});
$(event.target).parents().andSelf().each(function() {
$(event.target).parents().addBack().each(function() {
var selectee = $.data(this, "selectable-item");
if (selectee) {
var doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass('ui-selected');
@ -11217,7 +11217,7 @@ $.widget( "ui.slider", $.ui.mouse, {
.focus();
offset = closestHandle.offset();
mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" );
mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
top: event.pageY - offset.top -
@ -11698,7 +11698,7 @@ $.widget("ui.sortable", $.ui.mouse, {
if(this.options.handle && !overrideHandle) {
var validHandle = false;
$(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; });
$(this.options.handle, currentItem).find("*").addBack().each(function() { if(this == event.target) validHandle = true; });
if(!validHandle) return false;
}
@ -14592,7 +14592,7 @@ $.widget( "ui.tooltip", {
});
// remove title attributes to prevent native tooltips
this.element.find( this.options.items ).andSelf().each(function() {
this.element.find( this.options.items ).addBack().each(function() {
var element = $( this );
if ( element.is( "[title]" ) ) {
element
@ -14604,7 +14604,7 @@ $.widget( "ui.tooltip", {
_enable: function() {
// restore title attributes
this.element.find( this.options.items ).andSelf().each(function() {
this.element.find( this.options.items ).addBack().each(function() {
var element = $( this );
if ( element.data( "ui-tooltip-title" ) ) {
element.attr( "title", element.data( "ui-tooltip-title" ) );

2
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/code/information/information.html

@ -49,7 +49,7 @@
<i class="fa fa-remove"></i> 删除
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<div class="col-sm-12 select-table table-bordered">
<table id="bootstrap-table"></table>
</div>
</div>

5
lib/EmergencyService/zdxtEmergencyExcelService/src/main/java/com/zdxt/excel/controller/ExcelModuleController.java

@ -10,6 +10,8 @@ import com.zdxt.excel.service.IModuleExcelService;
import com.zdxt.excel.upload.util.FileAndStreamUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.TransactionException;
@ -30,9 +32,8 @@ import java.util.List;
*/
@Controller
@RequestMapping(value="/excel/module")
@Slf4j
public class ExcelModuleController extends BaseController {
private static final Logger log = LoggerFactory.getLogger(ExcelModuleController.class);
private String prefix = "excel/module";
public static final Integer FILE_DIRECTORY_BEGIN_INDEX = 0;

4
lib/EmergencyService/zdxtEmergencyExcelService/src/main/java/com/zdxt/excel/controller/ExcelUploadHisController.java

@ -9,6 +9,8 @@ import com.zdxt.excel.service.IExcelUploadHisService;
import com.zdxt.excel.upload.util.FileAndStreamUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.*;
@ -26,9 +28,9 @@ import java.util.List;
*/
@Controller
@RequestMapping(value="/excel/his")
@Slf4j
public class ExcelUploadHisController extends BaseController {
private static final Logger log = LoggerFactory.getLogger(ExcelUploadHisController.class);
private String prefix = "excel/his";
@Autowired

80
lib/EmergencyService/zdxtEmergencyExcelService/src/main/java/com/zdxt/excel/domain/AttachmentUpload.java

@ -3,7 +3,6 @@ package com.zdxt.excel.domain;
import com.zdxt.common.BaseDomain;
import lombok.Data;
@Data
public class AttachmentUpload extends BaseDomain {
/**
@ -57,4 +56,83 @@ public class AttachmentUpload extends BaseDomain {
*/
private String downloadUrl;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getExcelName() {
return excelName;
}
public void setExcelName(String excelName) {
this.excelName = excelName;
}
public String getExcelObjectName() {
return excelObjectName;
}
public void setExcelObjectName(String excelObjectName) {
this.excelObjectName = excelObjectName;
}
public String getExcelPath() {
return excelPath;
}
public void setExcelPath(String excelPath) {
this.excelPath = excelPath;
}
public Long getExcelSize() {
return excelSize;
}
public void setExcelSize(Long excelSize) {
this.excelSize = excelSize;
}
public String getExcelSuffix() {
return excelSuffix;
}
public void setExcelSuffix(String excelSuffix) {
this.excelSuffix = excelSuffix;
}
public String getBucketName() {
return bucketName;
}
public void setBucketName(String bucketName) {
this.bucketName = bucketName;
}
public String getUploadStatus() {
return uploadStatus;
}
public void setUploadStatus(String uploadStatus) {
this.uploadStatus = uploadStatus;
}
public String getExcelMdName() {
return excelMdName;
}
public void setExcelMdName(String excelMdName) {
this.excelMdName = excelMdName;
}
public String getDownloadUrl() {
return downloadUrl;
}
public void setDownloadUrl(String downloadUrl) {
this.downloadUrl = downloadUrl;
}
}

9
lib/EmergencyService/zdxtEmergencyExcelService/src/main/java/com/zdxt/excel/domain/ExcelModule.java

@ -2,7 +2,7 @@ package com.zdxt.excel.domain;
import lombok.Data;
@Data
//@Data
public class ExcelModule extends AttachmentUpload {
/**
@ -10,4 +10,11 @@ public class ExcelModule extends AttachmentUpload {
*/
private String moduleType;
public String getModuleType() {
return moduleType;
}
public void setModuleType(String moduleType) {
this.moduleType = moduleType;
}
}

121
lib/EmergencyService/zdxtEmergencyExcelService/src/main/java/com/zdxt/excel/domain/ExcelUpload.java

@ -3,7 +3,7 @@ package com.zdxt.excel.domain;
import com.zdxt.common.BaseDomain;
import lombok.Data;
@Data
public class ExcelUpload extends BaseDomain {
/**
@ -80,4 +80,123 @@ public class ExcelUpload extends BaseDomain {
*/
private String activityType;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAttachmentName() {
return attachmentName;
}
public void setAttachmentName(String attachmentName) {
this.attachmentName = attachmentName;
}
public String getAttachmentObjectName() {
return attachmentObjectName;
}
public void setAttachmentObjectName(String attachmentObjectName) {
this.attachmentObjectName = attachmentObjectName;
}
public String getAttachmentPath() {
return attachmentPath;
}
public void setAttachmentPath(String attachmentPath) {
this.attachmentPath = attachmentPath;
}
public Long getAttachmentSize() {
return attachmentSize;
}
public void setAttachmentSize(Long attachmentSize) {
this.attachmentSize = attachmentSize;
}
public String getAttachmentSuffix() {
return attachmentSuffix;
}
public void setAttachmentSuffix(String attachmentSuffix) {
this.attachmentSuffix = attachmentSuffix;
}
public String getAttachmentBucketName() {
return attachmentBucketName;
}
public void setAttachmentBucketName(String attachmentBucketName) {
this.attachmentBucketName = attachmentBucketName;
}
public String getAttachmentUploadStatus() {
return attachmentUploadStatus;
}
public void setAttachmentUploadStatus(String attachmentUploadStatus) {
this.attachmentUploadStatus = attachmentUploadStatus;
}
public String getAttachmentMdName() {
return attachmentMdName;
}
public void setAttachmentMdName(String attachmentMdName) {
this.attachmentMdName = attachmentMdName;
}
public String getDownloadUrl() {
return downloadUrl;
}
public void setDownloadUrl(String downloadUrl) {
this.downloadUrl = downloadUrl;
}
public String getUploadType() {
return uploadType;
}
public void setUploadType(String uploadType) {
this.uploadType = uploadType;
}
public String getUploadMessage() {
return uploadMessage;
}
public void setUploadMessage(String uploadMessage) {
this.uploadMessage = uploadMessage;
}
public String getErrorExcelObjName() {
return errorExcelObjName;
}
public void setErrorExcelObjName(String errorExcelObjName) {
this.errorExcelObjName = errorExcelObjName;
}
public String getErrorExcelPath() {
return errorExcelPath;
}
public void setErrorExcelPath(String errorExcelPath) {
this.errorExcelPath = errorExcelPath;
}
public String getActivityType() {
return activityType;
}
public void setActivityType(String activityType) {
this.activityType = activityType;
}
}

5
lib/EmergencyService/zdxtEmergencyExcelService/src/main/java/com/zdxt/excel/test/TestExportService.java

@ -1,16 +1,19 @@
package com.zdxt.excel.test;
import com.zdxt.excel.controller.ExcelUploadHisController;
import com.zdxt.excel.domain.ExcelUpload;
import com.zdxt.excel.export.service.IExcelExportDataService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
@Slf4j
public class TestExportService implements IExcelExportDataService<ExcelUpload,ExcelUpload> {
private static final Logger log = LoggerFactory.getLogger(TestExportService.class);
@Override
public List<ExcelUpload> getData(ExcelUpload param) {
log.error("test param+++++++++++++++++++++++++"+param.getUploadType());

2
lib/EmergencyService/zdxtEmergencyMessageService/src/main/java/com/zdxt/message/feign/PublicMessageApiImpl.java

@ -125,7 +125,7 @@ public class PublicMessageApiImpl implements PublicMessageApi {
BeanUtil.copyProperties(messageInfoDTO,messageInfo);
tioWsMsgHandler.sendMessage(channelContextByUser.tioConfig,objectMapper,messageInfo,userId);
}catch (Exception e){
log.error("消息推送失败",e);
// log.error("消息推送失败",e);
}
return ZDResponse.success("推送成功");
}

2
lib/EmergencyService/zdxtEmergencyMessageService/src/main/java/com/zdxt/message/tio/TioWsMsgHandler.java

@ -5,7 +5,7 @@ import cn.hutool.core.bean.BeanUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.org.apache.bcel.internal.generic.NEW;
//import com.sun.org.apache.bcel.internal.generic.NEW;
import com.zdxt.auth.dto.UserBean;
import com.zdxt.auth.feign.UserApi;
import com.zdxt.common.util.StringUtils;

6
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/controller/ThirdLoginController.java

@ -3,6 +3,7 @@ package com.zdxt.code.controller;
import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.JWTVerifier;
import com.zdxt.auth.feign.UserApi;
import com.zdxt.auth.framework.config.CsrfFilter;
import com.zdxt.auth.framework.shiro.jwt.JWTUtils;
import com.zdxt.auth.project.system.user.service.IUserService;
import com.zdxt.code.domain.SiqLogin;
@ -12,6 +13,8 @@ import com.zdxt.common.util.IdCardCryptoUtil;
import com.zdxt.common.ZDResponse;
import com.zdxt.domain.auth.User;
import lombok.extern.slf4j.Slf4j;
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.Controller;
@ -23,11 +26,10 @@ import java.util.Map;
/**
* 第三方登录控制层
*/
@Slf4j
@Controller
@RequestMapping("/thirdLogin")
public class ThirdLoginController {
private static final Logger log = LoggerFactory.getLogger(ThirdLoginController.class);
@Value("${siq.code}")
private String code;

5
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/MssqApiService.java

@ -16,5 +16,10 @@ public interface MssqApiService {
*/
Boolean addMssqOrder(MssqAddOrder mssqAddOrder) throws Exception;
/**
* 获取token
* @return
* @throws Exception
*/
MssqBaseDomain getMssqToken() throws Exception;
}

5
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/AccessTokenServiceImpl.java

@ -5,6 +5,8 @@ import com.zdxt.code.service.IAccessTokenService;
import com.zdxt.code.utils.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.record.DVALRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@ -15,9 +17,8 @@ import java.util.Map;
* 获取登录令牌接口 包含粤政易,市认证平台
*/
@Service
@Slf4j
public class AccessTokenServiceImpl implements IAccessTokenService {
private static final Logger log = LoggerFactory.getLogger(AccessTokenServiceImpl.class);
//粤政易 认证信息
// @Value("${yzy.yzyUr}")
private String YZYUrl;

9
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/EnterpriseInformationServiceImpl.java

@ -25,8 +25,11 @@ import com.zdxt.code.service.IEnterpriseMerchantAuthorizationService;
import com.zdxt.code.service.IQrCodeGenerateHistoryService;
import com.zdxt.code.utils.PasswordTools;
import com.zdxt.code.utils.QRCodeUtil;
import com.zdxt.code.utils.ServiceInvocation;
import com.zdxt.common.util.DateUtils;
import lombok.extern.slf4j.Slf4j;
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;
@ -41,10 +44,10 @@ import org.springframework.web.multipart.MultipartFile;
* @author chenrui
* @date 2024-02-20
*/
@Slf4j
@Service
public class EnterpriseInformationServiceImpl implements IEnterpriseInformationService
{
public class EnterpriseInformationServiceImpl implements IEnterpriseInformationService {
private static final Logger log = LoggerFactory.getLogger(EnterpriseInformationServiceImpl.class);
@Autowired
private EnterpriseInformationMapper enterpriseInformationMapper;

6
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/MssqApiServiceImpl.java

@ -6,16 +6,20 @@ import com.zdxt.code.domain.MssqBaseDomain;
import com.zdxt.code.service.MssqApiService;
import com.zdxt.code.utils.ServiceInvocation;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import static com.zdxt.code.utils.ServiceInvocation.gatewaySignEncode;
import static com.zdxt.code.utils.ServiceInvocation.httpRequest;
@Slf4j
@Service
public class MssqApiServiceImpl implements MssqApiService {
private static final Logger log = LoggerFactory.getLogger(MssqApiServiceImpl.class);
@Value("${mssq.apiUrl}")
private String mssqUrl;

6
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/ThirdLoginServiceImpl.java

@ -15,6 +15,7 @@ import com.zdxt.code.domain.Zfryjdm2405301;
import com.zdxt.code.mapper.Xzjcjbxx025711Mapper;
import com.zdxt.code.service.IEnterpriseInformationService;
import com.zdxt.code.service.ThirdLoginService;
import com.zdxt.code.utils.ServiceInvocation;
import com.zdxt.common.util.IdCardCryptoUtil;
import com.zdxt.common.ZDResponse;
import com.zdxt.common.util.DateUtils;
@ -22,6 +23,8 @@ import com.zdxt.common.util.UserConstants;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
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;
@ -32,11 +35,10 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class ThirdLoginServiceImpl implements ThirdLoginService {
private static final Logger log = LoggerFactory.getLogger(ThirdLoginServiceImpl.class);
@Value("${siq.code}")
private String code;

17
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/utils/Azdg.java

@ -2,6 +2,7 @@ package com.zdxt.code.utils;
import java.io.IOException;
import java.security.MessageDigest;
import java.util.Base64;
/**
* Azdg加密工具类
@ -80,16 +81,13 @@ public class Azdg {
}
public String base64_decode(String str) {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
// sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
if (str == null)
return null;
try {
return new String(decoder.decodeBuffer(str));
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
return new String(Base64.getDecoder().decode(str));
}
public String key(String txt, String encrypt_key) {
@ -112,7 +110,8 @@ public class Azdg {
}
public String base64_encode(String str) {
return new sun.misc.BASE64Encoder().encode(str.getBytes());
// return new sun.misc.BASE64Encoder().encode(str.getBytes());
return null;
}
public static final String strMD5(String s) {

6
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/utils/HttpUtil.java

@ -4,6 +4,7 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONObject;
import com.zdxt.auth.dto.DictDataBean;
import com.zdxt.code.service.impl.MssqApiServiceImpl;
import com.zdxt.common.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.Header;
@ -28,6 +29,8 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
@ -45,9 +48,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
@Slf4j
public class HttpUtil {
private static final Logger log = LoggerFactory.getLogger(HttpUtil.class);
public static String getDictName(List<DictDataBean> list, String name){
String value = "";
for(DictDataBean bean : list){

5
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/utils/QRCodeUtil.java

@ -9,9 +9,10 @@ import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.springframework.http.MediaType;
import org.springframework.util.Base64Utils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import sun.misc.BASE64Encoder;
//import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;
import java.awt.*;
@ -358,7 +359,7 @@ public class QRCodeUtil {
//输出二维码图片流
try {
ImageIO.write(image, "jpg",outputStream);
String base =new BASE64Encoder().encode(outputStream.toByteArray());
String base = Base64Utils.encodeToString(outputStream.toByteArray());
return base;
} catch (IOException e) {
// TODO Auto-generated catch block

6
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/utils/ServiceInvocation.java

@ -1,9 +1,12 @@
package com.zdxt.code.utils;
import com.alibaba.fastjson.JSONObject;
import com.zdxt.code.controller.ThirdLoginController;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.crypto.*;
@ -21,10 +24,9 @@ import java.security.SecureRandom;
/**
* 民生诉求氢气
*/
@Slf4j
@Component
public class ServiceInvocation {
private static final Logger log = LoggerFactory.getLogger(ServiceInvocation.class);
/**
* 密钥生成【核心网关】
*

21
lib/EmergencyServiceApi/pom.xml

@ -8,6 +8,9 @@
<artifactId>EmergencyServiceApi</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<!-- <properties>-->
<!-- <java.version>11</java.version>-->
<!-- </properties>-->
<modules>
<module>EmergencyAuthServiceApi</module>
@ -39,5 +42,21 @@
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
<encoding>UTF-8</encoding>
<!-- <compilerArgs>-->
<!-- <arg>-XDignore.symbol.file</arg>-->
<!-- </compilerArgs>-->
<!-- <fork>true</fork>-->
</configuration>
</plugin>
</plugins>
</build>
</project>

17
lib/ZdxtComponent/pom.xml

@ -57,4 +57,21 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
<encoding>UTF-8</encoding>
<!-- <compilerArgs>-->
<!-- <arg>-XDignore.symbol.file</arg>-->
<!-- </compilerArgs>-->
<!-- <fork>true</fork>-->
</configuration>
</plugin>
</plugins>
</build>
</project>
Loading…
Cancel
Save