clazz) {
+ try {
+ return mapper.readValue(bytes, clazz);
+ }
+ catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ protected String deserializeStringInternal(byte[] bytes) {
+ return new String(bytes, StandardCharsets.UTF_8);
+ }
+
+ @Override
+ protected byte[] serializeInternal(Object object) {
+ try {
+ return mapper.writeValueAsBytes(object);
+ }
+ catch (JsonProcessingException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ protected byte[] serializeInternal(String data) {
+ return data.getBytes(StandardCharsets.UTF_8);
+ }
+
+}
diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/MobileAuthenticationTokenDeserializer.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/MobileAuthenticationTokenDeserializer.java
new file mode 100644
index 000000000..b6e825035
--- /dev/null
+++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/MobileAuthenticationTokenDeserializer.java
@@ -0,0 +1,54 @@
+package com.pig4cloud.pigx.common.security.serializer;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+import com.pig4cloud.pigx.common.security.mobile.MobileAuthenticationToken;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.userdetails.User;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * @author lengleng
+ * @date 2020/10/21
+ *
+ * MobileAuthenticationToken 反序列化处理
+ */
+public class MobileAuthenticationTokenDeserializer extends StdDeserializer {
+
+ protected MobileAuthenticationTokenDeserializer() {
+ super(MobileAuthenticationToken.class);
+ }
+
+ @Override
+ public MobileAuthenticationToken deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
+
+ ObjectMapper mapper = (ObjectMapper) jp.getCodec();
+ JsonNode jsonNode = mapper.readTree(jp);
+
+ Set authorities = getAuthorities(mapper, jsonNode);
+
+ User principal = mapper.convertValue(jsonNode.get("principal"), User.class);
+
+ return new MobileAuthenticationToken(principal, authorities);
+ }
+
+ private Set getAuthorities(ObjectMapper mapper, JsonNode parentNode) {
+ JsonNode authoritiesNode = parentNode.get("authorities");
+ Set authorities = new HashSet<>(authoritiesNode.size());
+ for (Iterator authoritiesIt = authoritiesNode.get(1).elements(); authoritiesIt.hasNext();) {
+ JsonNode authorityNode = authoritiesIt.next();
+ SimpleGrantedAuthority authority = mapper.convertValue(authorityNode, SimpleGrantedAuthority.class);
+ authorities.add(authority);
+ }
+ return authorities;
+ }
+
+}
diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/MobileAuthenticationTokenMixin.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/MobileAuthenticationTokenMixin.java
new file mode 100644
index 000000000..169db7b00
--- /dev/null
+++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/MobileAuthenticationTokenMixin.java
@@ -0,0 +1,17 @@
+package com.pig4cloud.pigx.common.security.serializer;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+/**
+ * @author lengleng
+ * @date 2020/10/21
+ */
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "@class")
+@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE,
+ isGetterVisibility = JsonAutoDetect.Visibility.NONE)
+@JsonDeserialize(using = MobileAuthenticationTokenDeserializer.class)
+public class MobileAuthenticationTokenMixin {
+
+}
diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/OAuth2AuthenticationDeserializer.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/OAuth2AuthenticationDeserializer.java
new file mode 100644
index 000000000..41f5de7fc
--- /dev/null
+++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/OAuth2AuthenticationDeserializer.java
@@ -0,0 +1,93 @@
+package com.pig4cloud.pigx.common.security.serializer;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+import com.fasterxml.jackson.databind.type.CollectionType;
+import com.fasterxml.jackson.databind.type.MapType;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.oauth2.provider.OAuth2Authentication;
+import org.springframework.security.oauth2.provider.OAuth2Request;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * OAuth2Authentication 反序列化
+ *
+ * @author dream.lu
+ */
+public class OAuth2AuthenticationDeserializer extends StdDeserializer {
+
+ protected OAuth2AuthenticationDeserializer() {
+ super(OAuth2Authentication.class);
+ }
+
+ @Override
+ public OAuth2Authentication deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
+ ObjectMapper mapper = (ObjectMapper) jp.getCodec();
+ JsonNode jsonNode = mapper.readTree(jp);
+ Set authorities = getAuthorities(mapper, jsonNode);
+ JsonNode requestNode = jsonNode.get("storedRequest");
+ Map requestParameters = getMap(mapper, requestNode.get("requestParameters"));
+ String clientId = requestNode.get("clientId").asText();
+ boolean approved = requestNode.get("approved").asBoolean();
+ Set scope = getSet(mapper, requestNode.get("scope"));
+ Set resourceIds = getSet(mapper, requestNode.get("resourceIds"));
+ String redirectUri = requestNode.get("redirectUri").asText(null);
+ Set responseTypes = getSet(mapper, requestNode.get("responseTypes"));
+ Map extensionProperties = getMap(mapper, jsonNode.get("extensions"), Serializable.class);
+ // 构造 OAuth2Request
+ OAuth2Request request = new OAuth2Request(requestParameters, clientId, authorities, approved, scope,
+ resourceIds, redirectUri, responseTypes, extensionProperties);
+ JsonNode userAuthenticationNode = jsonNode.get("userAuthentication");
+ // UsernamePasswordAuthenticationToken 反序列化
+ Authentication authentication = null;
+ if (userAuthenticationNode != null && !userAuthenticationNode.isMissingNode()) {
+ authentication = (Authentication) mapper.convertValue(userAuthenticationNode, Object.class);
+ }
+
+ OAuth2Authentication oAuth2Authentication = new OAuth2Authentication(request, authentication);
+ oAuth2Authentication.setAuthenticated(true);
+ return oAuth2Authentication;
+
+ }
+
+ private static Set getSet(ObjectMapper mapper, JsonNode jsonNode) {
+ return getSet(mapper, jsonNode, String.class);
+ }
+
+ private static Set getSet(ObjectMapper mapper, JsonNode jsonNode, Class valueClass) {
+ CollectionType collectionType = mapper.getTypeFactory().constructCollectionType(Set.class, valueClass);
+ return mapper.convertValue(jsonNode, collectionType);
+ }
+
+ private static Map getMap(ObjectMapper mapper, JsonNode jsonNode) {
+ return getMap(mapper, jsonNode, String.class);
+ }
+
+ private static Map getMap(ObjectMapper mapper, JsonNode jsonNode, Class valueClass) {
+ MapType mapType = mapper.getTypeFactory().constructMapType(Map.class, String.class, valueClass);
+ return mapper.convertValue(jsonNode, mapType);
+ }
+
+ private Set getAuthorities(ObjectMapper mapper, JsonNode parentNode) {
+ JsonNode authoritiesNode = parentNode.get("authorities");
+ Set authorities = new HashSet<>(authoritiesNode.size());
+ for (Iterator authoritiesIt = authoritiesNode.get(1).elements(); authoritiesIt.hasNext();) {
+ JsonNode authorityNode = authoritiesIt.next();
+ SimpleGrantedAuthority authority = mapper.convertValue(authorityNode, SimpleGrantedAuthority.class);
+ authorities.add(authority);
+ }
+ return authorities;
+ }
+
+}
diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/OAuth2AuthenticationMixin.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/OAuth2AuthenticationMixin.java
new file mode 100755
index 000000000..cf99420f7
--- /dev/null
+++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/OAuth2AuthenticationMixin.java
@@ -0,0 +1,13 @@
+package com.pig4cloud.pigx.common.security.serializer;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "@class")
+@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE,
+ isGetterVisibility = JsonAutoDetect.Visibility.NONE)
+@JsonDeserialize(using = OAuth2AuthenticationDeserializer.class)
+public class OAuth2AuthenticationMixin {
+
+}
diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/OAuth2RefreshTokenDeserializer.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/OAuth2RefreshTokenDeserializer.java
new file mode 100644
index 000000000..cd2989250
--- /dev/null
+++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/OAuth2RefreshTokenDeserializer.java
@@ -0,0 +1,37 @@
+package com.pig4cloud.pigx.common.security.serializer;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+import org.springframework.security.oauth2.common.DefaultExpiringOAuth2RefreshToken;
+
+import java.io.IOException;
+import java.util.Date;
+
+/**
+ * DefaultExpiringOAuth2RefreshToken 反序列化
+ *
+ * @author dream.lu
+ */
+public class OAuth2RefreshTokenDeserializer extends StdDeserializer {
+
+ protected OAuth2RefreshTokenDeserializer() {
+ super(DefaultExpiringOAuth2RefreshToken.class);
+ }
+
+ @Override
+ public DefaultExpiringOAuth2RefreshToken deserialize(JsonParser jp, DeserializationContext ctxt)
+ throws IOException, JsonProcessingException {
+ // {"@class":"org.springframework.security.oauth2.common.DefaultExpiringOAuth2RefreshToken","value":"a94d2f04-d9be-49f9-9d9c-2bc7b34c8618","expiration":["java.util.Date",1605237988760]}
+ ObjectMapper mapper = (ObjectMapper) jp.getCodec();
+ JsonNode jsonNode = mapper.readTree(jp);
+ String value = jsonNode.get("value").asText();
+ JsonNode expirationNode = jsonNode.get("expiration");
+ Date date = mapper.convertValue(expirationNode, Date.class);
+ return new DefaultExpiringOAuth2RefreshToken(value, date);
+ }
+
+}
diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/OAuth2RefreshTokenMixin.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/OAuth2RefreshTokenMixin.java
new file mode 100644
index 000000000..6732826f5
--- /dev/null
+++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/OAuth2RefreshTokenMixin.java
@@ -0,0 +1,10 @@
+package com.pig4cloud.pigx.common.security.serializer;
+
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "@class")
+@JsonDeserialize(using = OAuth2RefreshTokenDeserializer.class)
+public class OAuth2RefreshTokenMixin {
+
+}
diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxTokenStoreAutoConfiguration.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/PigxTokenStoreAutoConfiguration.java
similarity index 87%
rename from pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxTokenStoreAutoConfiguration.java
rename to pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/PigxTokenStoreAutoConfiguration.java
index 926b29324..b2881ae5b 100644
--- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxTokenStoreAutoConfiguration.java
+++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/PigxTokenStoreAutoConfiguration.java
@@ -1,8 +1,9 @@
-package com.pig4cloud.pigx.common.security.component;
+package com.pig4cloud.pigx.common.security.serializer;
import cn.hutool.core.util.StrUtil;
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
import com.pig4cloud.pigx.common.core.util.KeyStrResolver;
+import com.pig4cloud.pigx.common.security.component.PigxRedisTokenStore;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -28,8 +29,8 @@ public class PigxTokenStoreAutoConfiguration {
@Bean
public TokenStore tokenStore() {
PigxRedisTokenStore tokenStore = new PigxRedisTokenStore(connectionFactory, resolver);
+ tokenStore.setSerializationStrategy(new JacksonRedisTokenStoreSerializationStrategy());
tokenStore.setPrefix(SecurityConstants.PIGX_PREFIX + SecurityConstants.OAUTH_PREFIX);
-
tokenStore.setAuthenticationKeyGenerator(new DefaultAuthenticationKeyGenerator() {
@Override
public String extractKey(OAuth2Authentication authentication) {
diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/PreAuthenticatedAuthenticationTokenDeserializer.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/PreAuthenticatedAuthenticationTokenDeserializer.java
new file mode 100644
index 000000000..9bd1a15fc
--- /dev/null
+++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/PreAuthenticatedAuthenticationTokenDeserializer.java
@@ -0,0 +1,57 @@
+package com.pig4cloud.pigx.common.security.serializer;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.userdetails.User;
+import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * @author lengleng
+ * @date 2020/10/21
+ *
+ * PreAuthenticatedAuthenticationToken 反序列化处理
+ */
+public class PreAuthenticatedAuthenticationTokenDeserializer
+ extends StdDeserializer {
+
+ protected PreAuthenticatedAuthenticationTokenDeserializer() {
+ super(PreAuthenticatedAuthenticationToken.class);
+ }
+
+ @Override
+ public PreAuthenticatedAuthenticationToken deserialize(JsonParser jp, DeserializationContext ctxt)
+ throws IOException, JsonProcessingException {
+
+ ObjectMapper mapper = (ObjectMapper) jp.getCodec();
+ JsonNode jsonNode = mapper.readTree(jp);
+
+ Set authorities = getAuthorities(mapper, jsonNode);
+
+ User principal = mapper.convertValue(jsonNode.get("principal"), User.class);
+
+ return new PreAuthenticatedAuthenticationToken(principal, "N/A", authorities);
+ }
+
+ private Set getAuthorities(ObjectMapper mapper, JsonNode parentNode) {
+ JsonNode authoritiesNode = parentNode.get("authorities");
+ Set authorities = new HashSet<>(authoritiesNode.size());
+ for (Iterator authoritiesIt = authoritiesNode.get(1).elements(); authoritiesIt.hasNext();) {
+ JsonNode authorityNode = authoritiesIt.next();
+ SimpleGrantedAuthority authority = mapper.convertValue(authorityNode, SimpleGrantedAuthority.class);
+ authorities.add(authority);
+ }
+ return authorities;
+ }
+
+}
diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/PreAuthenticatedAuthenticationTokenMixin.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/PreAuthenticatedAuthenticationTokenMixin.java
new file mode 100644
index 000000000..8ad0f0d16
--- /dev/null
+++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/serializer/PreAuthenticatedAuthenticationTokenMixin.java
@@ -0,0 +1,17 @@
+package com.pig4cloud.pigx.common.security.serializer;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+/**
+ * @author lengleng
+ * @date 2020/10/21
+ */
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "@class")
+@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE,
+ isGetterVisibility = JsonAutoDetect.Visibility.NONE)
+@JsonDeserialize(using = PreAuthenticatedAuthenticationTokenDeserializer.class)
+public class PreAuthenticatedAuthenticationTokenMixin {
+
+}
diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUser.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUser.java
index efbfd3ae7..50928bd0b 100644
--- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUser.java
+++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUser.java
@@ -17,6 +17,8 @@
package com.pig4cloud.pigx.common.security.service;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.core.GrantedAuthority;
@@ -83,9 +85,15 @@ public class PigxUser extends User {
* @throws IllegalArgumentException if a null value was passed either as
* a parameter or as an element in the GrantedAuthority collection
*/
- public PigxUser(Integer id, Integer deptId, String phone, String avatar, Integer tenantId, String username,
- String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired,
- boolean accountNonLocked, Collection extends GrantedAuthority> authorities) {
+ @JsonCreator
+ public PigxUser(@JsonProperty("id") Integer id, @JsonProperty("deptId") Integer deptId,
+ @JsonProperty("phone") String phone, @JsonProperty("avatar") String avatar,
+ @JsonProperty("tenantId") Integer tenantId, @JsonProperty("username") String username,
+ @JsonProperty("password") String password, @JsonProperty("enabled") boolean enabled,
+ @JsonProperty("accountNonExpired") boolean accountNonExpired,
+ @JsonProperty("credentialsNonExpired") boolean credentialsNonExpired,
+ @JsonProperty("accountNonLocked") boolean accountNonLocked,
+ @JsonProperty("authorities") Collection extends GrantedAuthority> authorities) {
super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
this.id = id;
this.deptId = deptId;
diff --git a/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories
index 21f3f2fc7..5d80ab746 100644
--- a/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories
+++ b/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories
@@ -1,7 +1,7 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.pig4cloud.pigx.common.security.component.PigxTokenEnhancer,\
com.pig4cloud.pigx.common.security.component.PigxSecurityInnerAspect,\
- com.pig4cloud.pigx.common.security.component.PigxTokenStoreAutoConfiguration,\
+ com.pig4cloud.pigx.common.security.serializer.PigxTokenStoreAutoConfiguration,\
com.pig4cloud.pigx.common.security.listener.AuthenticationFailureEventListener,\
com.pig4cloud.pigx.common.security.listener.AuthenticationSuccessEventListener
diff --git a/pigx-upms/pigx-upms-biz/logs/pigx-upms-biz/2020-08/debug.2020-08-21.0.log.gz b/pigx-upms/pigx-upms-biz/logs/pigx-upms-biz/2020-08/debug.2020-08-21.0.log.gz
deleted file mode 100644
index 707a73ae9..000000000
Binary files a/pigx-upms/pigx-upms-biz/logs/pigx-upms-biz/2020-08/debug.2020-08-21.0.log.gz and /dev/null differ
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/DemoController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/DemoController.java
new file mode 100644
index 000000000..f3fd67af8
--- /dev/null
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/DemoController.java
@@ -0,0 +1,27 @@
+package com.pig4cloud.pigx.admin.controller;
+
+import com.pig4cloud.pigx.common.security.annotation.Inner;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author lengleng
+ * @date 2020/10/13
+ */
+@Inner
+@RequestMapping(value = "/demo", method = RequestMethod.POST)
+@RestController
+public class DemoController {
+
+ @Inner(false)
+ @GetMapping("/test")
+ public String demo() {
+ return "ssucess";
+ }
+
+ @Inner(false)
+ @GetMapping("/test/{id}")
+ public String demo2(@PathVariable String id) {
+ return "ssucess";
+ }
+
+}