فهرست منبع

退出登录添加操作

gao.qiang 2 سال پیش
والد
کامیت
f7fb1c1b32

+ 38 - 2
base-framework/src/main/java/com/ozs/framework/security/handle/AuthenticationEntryPointImpl.java

@@ -2,8 +2,19 @@ package com.ozs.framework.security.handle;
 
 import java.io.IOException;
 import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import com.ozs.common.constant.Constants;
+import com.ozs.common.core.domain.model.LoginUser;
+import com.ozs.common.core.redis.RedisCache;
+import com.ozs.framework.web.service.TokenService;
+import com.ozs.system.domain.SysLoginInfo;
+import com.ozs.system.service.ISysLoginInfoService;
+import io.jsonwebtoken.Claims;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.AuthenticationEntryPoint;
 import org.springframework.stereotype.Component;
@@ -22,13 +33,38 @@ import com.ozs.common.utils.StringUtils;
 public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable
 {
     private static final long serialVersionUID = -8970718410437077606L;
+    @Autowired
+    private TokenService tokenService;
+    @Autowired
+    private RedisCache redisCache;
+    @Autowired
+    private ISysLoginInfoService iSysLoginInfoService;
 
     @Override
     public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e)
             throws IOException
     {
         int code = HttpStatus.UNAUTHORIZED;
-        String msg = StringUtils.format("请求访问:{},认证失败,无法访问系统资源", request.getRequestURI());
-        ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(code, msg)));
+        String token = tokenService.getToken(request);
+        if (StringUtils.isNotEmpty(token)) {
+            try {
+                Claims claims =tokenService.parseToken(token);
+                String app = "";
+                // 解析对应的权限以及用户信息
+                String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
+                if (StringUtils.isEmpty(uuid)) {
+                    uuid = (String) claims.get(Constants.LOGIN_USER_KEY_APP);
+                    app = "APP";
+                }
+                String userKey = tokenService.getTokenKey(uuid);
+                LoginUser user = redisCache.getCacheObject(userKey);
+                SysLoginInfo loginTime = iSysLoginInfoService.getLoginTime(user.getUsername());
+                SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                String format1 = dateFormat1.format(loginTime.getLoginTime());
+                String msg = StringUtils.format("请求访问:{},认证失败,无法访问系统资源"+format1, request.getRequestURI());
+                ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(code, msg)));
+            }catch (Exception exception){
+            }
+        }
     }
 }

+ 3 - 3
base-framework/src/main/java/com/ozs/framework/web/service/TokenService.java

@@ -243,7 +243,7 @@ public class TokenService {
      * @param token 令牌
      * @return 数据声明
      */
-    private Claims parseToken(String token) {
+    public Claims parseToken(String token) {
         return Jwts.parser()
                 .setSigningKey(secret)
                 .parseClaimsJws(token)
@@ -267,7 +267,7 @@ public class TokenService {
      * @param request
      * @return token
      */
-    private String getToken(HttpServletRequest request) {
+    public String getToken(HttpServletRequest request) {
         String token = request.getHeader(header);
         if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) {
             token = token.replace(Constants.TOKEN_PREFIX, "");
@@ -275,7 +275,7 @@ public class TokenService {
         return token;
     }
 
-    private String getTokenKey(String uuid) {
+    public String getTokenKey(String uuid) {
         return CacheConstants.LOGIN_TOKEN_KEY + uuid;
     }
 

+ 3 - 0
base-system/src/main/java/com/ozs/system/mapper/SysLoginInfoMapper.java

@@ -7,6 +7,7 @@ import com.ozs.system.domain.SysLoginInfo;
 import com.ozs.system.domain.SysLoginInfo;
 import icu.mhb.mybatisplus.plugln.base.mapper.JoinBaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 系统访问日志情况信息 数据层
@@ -46,4 +47,6 @@ public interface SysLoginInfoMapper extends JoinBaseMapper<SysLoginInfo> {
     public int cleanLogininfor();
 
     SysLoginInfo selectLoginLogById (Long infoId);
+
+    SysLoginInfo getLoginTime(@Param("userName") String userName);
 }

+ 2 - 0
base-system/src/main/java/com/ozs/system/service/ISysLoginInfoService.java

@@ -39,6 +39,8 @@ public interface ISysLoginInfoService extends JoinIService<SysLoginInfo> {
      * 清空系统登录日志
      */
     public void cleanLogininfor();
+    
+    public SysLoginInfo getLoginTime(String userName);
     /**
      * 查询登录日志详细
      *

+ 5 - 0
base-system/src/main/java/com/ozs/system/service/impl/SysLoginInfoServiceImpl.java

@@ -62,6 +62,11 @@ public class SysLoginInfoServiceImpl extends JoinServiceImpl<SysLoginInfoMapper,
         logininforMapper.cleanLogininfor();
     }
 
+    @Override
+    public SysLoginInfo getLoginTime(String userName) {
+        return logininforMapper.getLoginTime(userName);
+    }
+
     /**
      * 查询登录日志详细
      *

+ 6 - 0
base-system/src/main/resources/mapper/system/SysLogininforMapper.xml

@@ -57,4 +57,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time from sys_login_info
 		where info_id = #{infoId}
 	</select>
+
+	<select id="getLoginTime" parameterType="string" resultMap="SysLoginInfoesult">
+		select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time from sys_login_info
+		where user_name = #{userName}
+		order by login_time desc limit 1
+	</select>
 </mapper>