xiongzhu пре 3 година
родитељ
комит
68f3c2003d

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

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

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

@@ -146,7 +146,6 @@ public class UserService {
     }
 
     public User create(UserRegister userRegister) {
-        long ts = System.currentTimeMillis();
         User user = new User();
         BeanUtils.copyProperties(userRegister, user);
         user.setShareRatio(sysConfigService.getBigDecimal("share_ratio"));
@@ -154,25 +153,7 @@ public class UserService {
         if (StringUtils.isNotBlank(userRegister.getPassword())) {
             user.setPassword(passwordEncoder.encode(userRegister.getPassword()));
         }
-        log.info("copy user {}ms", System.currentTimeMillis() - ts);
-        ts = System.currentTimeMillis();
-        user = userRepo.save(user);
-        log.info("save user {}ms", System.currentTimeMillis() - ts);
-        return user;
-    }
-
-    public User create(String username, String phone, String password) {
-        long ts = System.currentTimeMillis();
-        User user = new User();
-        user.setUsername(username);
-        user.setPhone(phone);
-        user.setShareRatio(BigDecimal.ZERO);
-        user.setAuthStatus(AuthStatus.NOT_AUTH);
-        log.info("copy user {}ms", System.currentTimeMillis() - ts);
-        ts = System.currentTimeMillis();
-        user = userRepo.save(user);
-        log.info("save user {}ms", System.currentTimeMillis() - ts);
-        return user;
+        return userRepo.save(user);
     }
 
     @EventListener
@@ -266,8 +247,13 @@ public class UserService {
     }
 
     public User testPhoneRegister(String phone) {
-        return create(RandomStringUtils.randomNumeric(30),
-                RandomStringUtils.randomNumeric(30), "123456");
+        return create(UserRegister.builder()
+                .avatar(Constants.DEFAULT_AVATAR)
+                .username(RandomStringUtils.randomAlphabetic(32))
+                .nickname(RandomStringUtils.randomAlphabetic(32))
+                .phone(RandomStringUtils.randomNumeric(16))
+                .password("123456")
+                .build());
     }
 
     public void del(Long id) {
@@ -317,6 +303,20 @@ public class UserService {
         return user;
     }
 
+    public User loginByUsernamePwd(String username, String password) {
+        if (StringUtils.isEmpty(username)) {
+            throw new BusinessException("用户名错误");
+        }
+        User user = userRepo.findByUsernameAndDelFalse(username).orElseThrow(new BusinessException("账号或密码错误"));
+
+        if (StringUtils.isEmpty(user.getPassword())
+                || !passwordEncoder.matches(password, user.getPassword())) {
+            throw new BusinessException("账号或密码错误");
+        }
+
+        return user;
+    }
+
     public User loginMp(String code) throws WxErrorException {
         WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
         WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(accessToken, null);

+ 6 - 30
src/main/java/com/izouma/nineth/web/AuthenticationController.java

@@ -4,7 +4,6 @@ import com.izouma.nineth.domain.User;
 import com.izouma.nineth.enums.AuthorityName;
 import com.izouma.nineth.exception.AuthenticationException;
 import com.izouma.nineth.security.JwtTokenUtil;
-import com.izouma.nineth.security.JwtUser;
 import com.izouma.nineth.security.JwtUserFactory;
 import com.izouma.nineth.service.CaptchaService;
 import com.izouma.nineth.service.UserService;
@@ -12,11 +11,6 @@ import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.authentication.BadCredentialsException;
-import org.springframework.security.authentication.DisabledException;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -24,7 +18,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Objects;
 
 @Slf4j
 @AllArgsConstructor
@@ -38,19 +31,18 @@ public class AuthenticationController {
 
     @PostMapping("/login")
     public String loginByUserPwd(String username, String password, Integer expiration) {
-        Authentication authentication = authenticate(username, password);
-        JwtUser jwtUser = (JwtUser) authentication.getPrincipal();
-        return jwtTokenUtil.generateToken(jwtUser);
+        User user = userService.loginByUsernamePwd(username, password);
+        return jwtTokenUtil.generateToken(JwtUserFactory.create(user));
     }
 
     @PostMapping("/loginAdmin")
     public String loginByUserPwdAdmin(String username, String password, Integer expiration) {
-        Authentication authentication = authenticate(username, password);
-        if (!authentication.getAuthorities().contains(new SimpleGrantedAuthority(AuthorityName.ROLE_ADMIN.name()))) {
+        User user = userService.loginByUsernamePwd(username, password);
+        if (user.getAuthorities() == null ||
+                user.getAuthorities().stream().anyMatch(au -> au.getName().equals(AuthorityName.ROLE_ADMIN.name()))) {
             throw new AuthenticationException("禁止登录", null);
         }
-        JwtUser jwtUser = (JwtUser) authentication.getPrincipal();
-        return jwtTokenUtil.generateToken(jwtUser);
+        return jwtTokenUtil.generateToken(JwtUserFactory.create(user));
     }
 
     @PostMapping("/phoneLogin")
@@ -139,20 +131,4 @@ public class AuthenticationController {
     }
 
 
-    /**
-     * Authenticates the user. If something is wrong, an {@link AuthenticationException} will be thrown
-     *
-     * @return Authentication
-     */
-    private Authentication authenticate(String username, String password) {
-        Objects.requireNonNull(username);
-        Objects.requireNonNull(password);
-        try {
-            return authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
-        } catch (DisabledException e) {
-            throw new AuthenticationException("禁止登录", e);
-        } catch (BadCredentialsException e) {
-            throw new AuthenticationException("用户名或密码错误", e);
-        }
-    }
 }

+ 8 - 3
src/main/java/com/izouma/nineth/web/DevelopController.java

@@ -5,10 +5,12 @@ import org.reflections.Reflections;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.mvc.condition.PathPatternsRequestCondition;
 import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
 import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition;
 import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
 import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
+import org.springframework.web.util.pattern.PathPattern;
 
 import javax.persistence.Entity;
 import java.util.*;
@@ -50,9 +52,12 @@ public class DevelopController {
             HashMap<String, String> hashMap = new HashMap<>();
             RequestMappingInfo info = m.getKey();
             HandlerMethod method = m.getValue();
-            PatternsRequestCondition p = info.getPatternsCondition();
-            for (String url : p.getPatterns()) {
-                hashMap.put("url", url);
+            PathPatternsRequestCondition p = info.getPathPatternsCondition();
+            if (p == null) {
+                continue;
+            }
+            for (PathPattern url : p.getPatterns()) {
+                hashMap.put("url", url.getPatternString());
             }
             hashMap.put("className", method.getMethod().getDeclaringClass().getName()); // 类名
             hashMap.put("method", method.getMethod().getName()); // 方法名

+ 44 - 0
src/main/java/com/izouma/nineth/web/RedisCacheController.java

@@ -0,0 +1,44 @@
+package com.izouma.nineth.web;
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.Cursor;
+import org.springframework.data.redis.core.RedisCallback;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ScanOptions;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RestController
+@RequestMapping("/restCache")
+@AllArgsConstructor
+@Slf4j
+public class RedisCacheController {
+    private RedisTemplate<String, Object> redisTemplate;
+
+    @GetMapping("/scan")
+    public Iterable<String> scan(String key) {
+
+        return redisTemplate.execute((RedisCallback<Iterable<String>>) connection -> {
+
+            List<String> keys = new ArrayList<>();
+
+            Cursor<byte[]> cursor = connection.scan(ScanOptions.scanOptions()
+                    .count(1000)
+                    .match(key)
+                    .build());
+            while (cursor.hasNext()) {
+                keys.add(new String(cursor.next()));
+            }
+
+            cursor.close();
+
+            return keys;
+        });
+
+    }
+}