Просмотр исходного кода

Merge branch 'master' of http://git.izouma.com/xiongzhu/9th

xuqiang 4 лет назад
Родитель
Сommit
39282014c6

+ 7 - 0
src/main/java/com/izouma/nineth/JsonView/UserView.java

@@ -0,0 +1,7 @@
+package com.izouma.nineth.JsonView;
+
+public interface UserView {
+    public static class Redis {
+    }
+
+}

+ 3 - 0
src/main/java/com/izouma/nineth/config/CacheConfig.java

@@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
 import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module;
 import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.izouma.nineth.JsonView.UserView;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
 import org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration;
 import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
@@ -47,6 +48,8 @@ public class CacheConfig {
                 .enable(Hibernate5Module.Feature.FORCE_LAZY_LOADING));
         mapper.registerModule(new JavaTimeModule());
         mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+        mapper.setConfig(mapper.getSerializationConfig().withView(UserView.Redis.class));
+
         serializer.setObjectMapper(mapper);
 
         template.setValueSerializer(serializer);

+ 6 - 2
src/main/java/com/izouma/nineth/domain/User.java

@@ -2,10 +2,14 @@ package com.izouma.nineth.domain;
 
 import com.alibaba.excel.annotation.ExcelIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonView;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.izouma.nineth.JsonView.UserView;
 import com.izouma.nineth.annotations.Searchable;
 import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.enums.AuthStatus;
 import com.izouma.nineth.security.Authority;
+import com.izouma.nineth.utils.UserAuthoritySerializer;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -40,7 +44,7 @@ public class User extends BaseEntity implements Serializable {
 
     private String avatar;
 
-    @JsonIgnore
+    @JsonView(UserView.Redis.class)
     private String password;
 
     private boolean del = false;
@@ -52,6 +56,7 @@ public class User extends BaseEntity implements Serializable {
             inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))})
     @BatchSize(size = 20)
     @ExcelIgnore
+    @JsonSerialize(using = UserAuthoritySerializer.class, as = HashSet.class)
     private Set<Authority> authorities = new HashSet<>();
 
     private String openId;
@@ -89,7 +94,6 @@ public class User extends BaseEntity implements Serializable {
     @Enumerated(EnumType.STRING)
     private AuthStatus authStatus;
 
-    @JsonIgnore
     private String nftAccount;
 
     @JsonIgnore

+ 1 - 0
src/main/java/com/izouma/nineth/repo/UserRepo.java

@@ -18,6 +18,7 @@ public interface UserRepo extends JpaRepository<User, Long>, JpaSpecificationExe
     @Query("update User u set u.del = true where u.id = ?1")
     void softDelete(Long id);
 
+    @Cacheable("user")
     User findByUsernameAndDelFalse(String username);
 
     List<User> findAllByAuthoritiesContainsAndDelFalse(Authority authority);

+ 4 - 4
src/main/java/com/izouma/nineth/security/JwtUserDetailsService.java

@@ -1,7 +1,7 @@
 package com.izouma.nineth.security;
 
-import com.izouma.nineth.dto.UserDTO;
-import com.izouma.nineth.service.UserService;
+import com.izouma.nineth.domain.User;
+import com.izouma.nineth.repo.UserRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
@@ -11,11 +11,11 @@ import org.springframework.stereotype.Service;
 @AllArgsConstructor
 @Service("jwtUserDetailsService")
 public class JwtUserDetailsService implements UserDetailsService {
-    private UserService userService;
+    private UserRepo userRepo;
 
     @Override
     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
-        UserDTO user = userService.findByUsernameAndDelFalse(username);
+        User user = userRepo.findByUsernameAndDelFalse(username);
 
         if (user == null) {
             throw new UsernameNotFoundException(String.format("No user found with username '%s'.", username));

+ 2 - 12
src/main/java/com/izouma/nineth/service/UserService.java

@@ -73,18 +73,8 @@ public class UserService {
         return orig;
     }
 
-    @Cacheable("user")
-    public UserDTO findByUsernameAndDelFalse(String username) {
-        User user = userRepo.findByUsernameAndDelFalse(username);
-        if (user != null) {
-            UserDTO dto = new UserDTO();
-            BeanUtils.copyProperties(user, dto);
-            if (user.getAuthorities() != null) {
-                dto.setAuthorities(new HashSet<>(user.getAuthorities()));
-            }
-            return dto;
-        }
-        return null;
+    @CacheEvict(value = "user", allEntries = true)
+    public void clearCache() {
     }
 
     public Page<User> all(PageQuery pageQuery) {

+ 40 - 0
src/main/java/com/izouma/nineth/utils/UserAuthoritySerializer.java

@@ -0,0 +1,40 @@
+package com.izouma.nineth.utils;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.core.type.WritableTypeId;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
+import com.izouma.nineth.security.Authority;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
+
+public class UserAuthoritySerializer extends JsonSerializer<Set<Authority>> {
+    @Override
+    public void serialize(Set<Authority> value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+        if (value == null) {
+            gen.writeNull();
+        } else {
+            gen.writeStartArray();
+            for (Authority authority : value) {
+                gen.writeObject(authority);
+            }
+            gen.writeEndArray();
+        }
+    }
+
+    @Override
+    public void serializeWithType(Set<Authority> value, JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
+        HashSet<Authority> set = new HashSet<>(value);
+        WritableTypeId typeId = typeSer.writeTypePrefix(gen, typeSer.typeId(set, JsonToken.VALUE_STRING));
+        gen.writeStartArray();
+        for (Authority authority : set) {
+            gen.writeObject(authority);
+        }
+        gen.writeEndArray();
+        typeSer.writeTypeSuffix(gen, typeId);
+    }
+}

+ 6 - 0
src/test/java/com/izouma/nineth/service/UserServiceTest.java

@@ -1,6 +1,7 @@
 package com.izouma.nineth.service;
 
 import com.izouma.nineth.ApplicationTests;
+import com.izouma.nineth.repo.UserRepo;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -10,8 +11,13 @@ public class UserServiceTest extends ApplicationTests {
 
     @Autowired
     private UserService userService;
+    @Autowired
+    private UserRepo    userRepo;
 
     @Test
     public void findByUsernameAndDelFalse1() {
+        userService.clearCache();
+        userRepo.findByUsernameAndDelFalse("admin");
+        userRepo.findByUsernameAndDelFalse("admin");
     }
 }