Kaynağa Gözat

单点登录

lirui 3 yıl önce
ebeveyn
işleme
bf61b3f0c1

+ 1 - 1
eladmin-system/src/main/java/me/zhengjie/modules/dm/announce/service/impl/DmAnnounceServiceImpl.java

@@ -97,7 +97,7 @@ public class DmAnnounceServiceImpl implements DmAnnounceService {
             DmMessageSendLog dmMessageSendLog = new DmMessageSendLog();
             dmMessageSendLog.setSystemName("中控平台");
             dmMessageSendLog.setSendId("dm_announce|id|"+dmAnnounceDto.getId());
-            dmMessageSendLog.setSendUserId(userService.findByName(resources.getCreateBy()).getId());
+            dmMessageSendLog.setSendUserId("System");
             JSONObject sendContentJSON = new JSONObject();
             sendContentJSON.put("text",resources.getAnnounceContent());
             dmMessageSendLog.setSendContent(sendContentJSON);

+ 6 - 0
eladmin-system/src/main/java/me/zhengjie/modules/dm/messageSendLog/domain/DmMessageSendLog.java

@@ -55,4 +55,10 @@ public class DmMessageSendLog {
     @Field("create_time")
     private String createTime;
 
+    /*
+     *  是否已读
+     */
+    @Field("is_read")
+    private Boolean isRead;
+
 }

+ 13 - 0
eladmin-system/src/main/java/me/zhengjie/modules/dm/messageSendLog/service/DmMessageSendLogService.java

@@ -27,6 +27,19 @@ public interface DmMessageSendLogService {
      */
     DmMessageSendLog findById(String id);
 
+    /**
+     * 根据sendUserId查询
+     * @param username
+     * @return DmMessageSendLog
+     */
+    List<DmMessageSendLog> findByUsername(String username);
+
+    /**
+     * 根据id修改
+     * @param id
+     */
+    void updateById(String id);
+
     /**
      * 查询数据分页
      * @return Map<String,Object>

+ 20 - 0
eladmin-system/src/main/java/me/zhengjie/modules/dm/messageSendLog/service/impl/DmMessageSendLogServiceImpl.java

@@ -1,16 +1,20 @@
 package me.zhengjie.modules.dm.messageSendLog.service.impl;
 
+import com.mongodb.WriteResult;
+import com.mongodb.client.result.UpdateResult;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import lombok.RequiredArgsConstructor;
 import me.zhengjie.modules.dm.messageSendLog.domain.DmMessageSendLog;
 import me.zhengjie.modules.dm.messageSendLog.service.DmMessageSendLogService;
 import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.awt.print.Pageable;
 import java.util.List;
+import java.util.regex.Pattern;
 
 @Service
 @RequiredArgsConstructor
@@ -28,6 +32,7 @@ public class DmMessageSendLogServiceImpl implements DmMessageSendLogService {
 
     @Override
     public DmMessageSendLog create(DmMessageSendLog resources) {
+        resources.setIsRead(false);
         return  mongoTemplate.save(resources);
     }
 
@@ -37,6 +42,21 @@ public class DmMessageSendLogServiceImpl implements DmMessageSendLogService {
         return mongoTemplate.findById(query,DmMessageSendLog.class);
     }
 
+    @Override
+    public List<DmMessageSendLog> findByUsername(String username){
+        Pattern pattern = Pattern.compile("^.*" + username + ".*$");
+        Query query=new Query(Criteria.where("usernames").regex(pattern));
+        return mongoTemplate.find(query,DmMessageSendLog.class);
+    }
+
+    @Override
+    public void updateById(String id){
+        Query query = new Query();
+        query.addCriteria(Criteria.where("_id").is(id));  //_id区分引号 "1"和1
+        Update update = Update.update("is_read",true);
+        mongoTemplate.upsert(query, update, DmMessageSendLog.class);//有则更新,没有则新增
+    }
+
     @Override
     public List<DmMessageSendLog> queryAll() {
         return mongoTemplate.findAll(DmMessageSendLog.class);

+ 27 - 0
eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthorizationController.java

@@ -77,6 +77,7 @@ public class AuthorizationController {
     public ResponseEntity<Object> login(@Validated @RequestBody AuthUserDto authUser, HttpServletRequest request) throws Exception {
         // 密码解密
         String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword());
+        System.out.println("password:"+password);
         // 查询验证码
         String code = (String) redisUtils.get(authUser.getUuid());
         // 清除验证码
@@ -108,6 +109,32 @@ public class AuthorizationController {
         return ResponseEntity.ok(authInfo);
     }
 
+    @ApiOperation("单点登录授权")
+    @AnonymousPostMapping(value = "/sso")
+    public ResponseEntity<Object> sso(@Validated @RequestBody AuthUserDto authUser, HttpServletRequest request) throws Exception {
+        // 密码解密
+        String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword());
+        UsernamePasswordAuthenticationToken authenticationToken =
+                new UsernamePasswordAuthenticationToken(authUser.getUsername(), password);
+        Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
+        SecurityContextHolder.getContext().setAuthentication(authentication);
+        // 生成令牌
+        String token = tokenProvider.createToken(authentication);
+        final JwtUserDto jwtUserDto = (JwtUserDto) authentication.getPrincipal();
+        // 保存在线信息
+        onlineUserService.save(jwtUserDto, token, request);
+        // 返回 token 与 用户信息
+        Map<String, Object> authInfo = new HashMap<String, Object>(2) {{
+            put("token", properties.getTokenStartWith() + token);
+            put("user", jwtUserDto);
+        }};
+        if (loginProperties.isSingleLogin()) {
+            //踢掉之前已经登录的token
+            onlineUserService.checkLoginOnUser(authUser.getUsername(), token);
+        }
+        return ResponseEntity.ok(authInfo);
+    }
+
     @ApiOperation("获取用户信息")
     @GetMapping(value = "/info")
     public ResponseEntity<Object> getUserInfo() {

+ 2 - 2
eladmin-system/src/main/java/me/zhengjie/modules/system/repository/UserRepository.java

@@ -72,8 +72,8 @@ public interface UserRepository extends JpaRepository<User, String>, JpaSpecific
      * @param lastPasswordResetTime /
      */
     @Modifying
-    @Query(value = "update sys_user set password = ?2 , pwd_reset_time = ?3 where username = ?1",nativeQuery = true)
-    void updatePass(String username, String pass, Date lastPasswordResetTime);
+    @Query(value = "update sys_user set password = ?2, oss_password = ?3 , pwd_reset_time = ?4 where username = ?1",nativeQuery = true)
+    void updatePass(String username, String pass, String ossPass, Date lastPasswordResetTime);
 
     /**
      * 修改密码

+ 1 - 1
eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java

@@ -164,7 +164,7 @@ public class UserController {
         if(passwordEncoder.matches(newPass, user.getPassword())){
             throw new BadRequestException("新密码不能与旧密码相同");
         }
-        userService.updatePass(user.getUsername(),passwordEncoder.encode(newPass));
+        userService.updatePass(user.getUsername(),passwordEncoder.encode(newPass),RsaUtils.encryptByPublicKey(RsaProperties.publicKey,newPass));
         return new ResponseEntity<>(HttpStatus.OK);
     }
 

+ 1 - 1
eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java

@@ -81,7 +81,7 @@ public interface UserService {
      * @param username 用户名
      * @param encryptPassword 密码
      */
-    void updatePass(String username, String encryptPassword);
+    void updatePass(String username, String encryptPassword, String ossPassword);
 
     /**
      * 修改密码

+ 2 - 2
eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java

@@ -275,8 +275,8 @@ public class UserServiceImpl implements UserService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updatePass(String username, String pass) {
-        userRepository.updatePass(username, pass, new Date());
+    public void updatePass(String username, String pass, String ossPass) {
+        userRepository.updatePass(username, pass, ossPass, new Date());
         flushCache(username);
     }
 

+ 21 - 0
eladmin-system/src/main/java/me/zhengjie/modules/thirdparty/v1/MessageSendLogApiController.java

@@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Map;
 
 @Slf4j
@@ -61,4 +62,24 @@ public class MessageSendLogApiController {
         }
     }
 
+    @Log("查询消息")
+    @ApiOperation("查询消息")
+    @AnonymousPostMapping(value = "/findByUsername")
+    public BaseResponse<Object> findByUsername(@RequestBody QueryPageParams<String> params) {
+        SecurityUtils.CheckApiAuth(params);
+        return new BaseResponse<>(dmMessageSendLogService.findByUsername(params.getQuery()));
+    }
+
+    @Log("消息已读")
+    @ApiOperation("消息已读")
+    @AnonymousPostMapping(value = "/messageRead")
+    public BaseResponse<Object> messageRead(@RequestBody QueryPageParams<List<String>> params) {
+        SecurityUtils.CheckApiAuth(params);
+        for (String id : params.getQuery()) {
+            dmMessageSendLogService.updateById(id);
+        }
+        System.out.println();
+        return new BaseResponse<>(true);
+    }
+
 }

+ 2 - 2
eladmin-system/src/main/java/me/zhengjie/modules/thirdparty/v1/UserApiController.java

@@ -157,7 +157,7 @@ public class UserApiController {
     @AnonymousGetMapping(value = "/sso11")
     public BaseResponse<Object> sso11(String token) throws Exception {
         Map<String,Object> newToken = SecurityUtils.getToken(key);
-        UserDto userDto = userService.findByName("chaoshengqin");
+        UserDto userDto = userService.findByName("yingli");
         //组装返回值
         JSONObject returnData = new JSONObject();
         returnData.put("nonce",newToken.get("nonce"));
@@ -269,7 +269,7 @@ public class UserApiController {
             throw new BadRequestException("新密码不能与旧密码相同");
         }
         System.out.println(passwordEncoder.encode(newPass));
-        userService.updatePass(user.getUsername(),passwordEncoder.encode(newPass));
+        userService.updatePass(user.getUsername(),passwordEncoder.encode(newPass),RsaUtils.encryptByPublicKey(RsaProperties.publicKey,newPass));
         return new BaseResponse(null);
     }