From 8d64b3852ace86a8a4b5afebca07e358d13926cd Mon Sep 17 00:00:00 2001 From: zhujunjieit Date: Mon, 28 Jan 2019 23:09:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E7=99=BB=E9=99=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/ExamQuestionServiceImpl.java | 1 - .../java/com/ruoyi/framework/jwt/JwtUtil.java | 10 +- .../web/session/OnlineWebSessionManager.java | 114 +++++++----------- .../exception/DefaultExceptionHandler.java | 11 +- .../service/impl/SysUserServiceImpl.java | 4 + .../ruoyi/vip/domain/vo/VipUserOrdersVO.java | 9 ++ .../mapper/vip/VipUserOrdersMapper.xml | 4 +- 7 files changed, 78 insertions(+), 75 deletions(-) diff --git a/ruoyi-exam/src/main/java/com/ruoyi/exam/service/impl/ExamQuestionServiceImpl.java b/ruoyi-exam/src/main/java/com/ruoyi/exam/service/impl/ExamQuestionServiceImpl.java index 2d1257784..0473dedf2 100644 --- a/ruoyi-exam/src/main/java/com/ruoyi/exam/service/impl/ExamQuestionServiceImpl.java +++ b/ruoyi-exam/src/main/java/com/ruoyi/exam/service/impl/ExamQuestionServiceImpl.java @@ -165,7 +165,6 @@ public class ExamQuestionServiceImpl extends AbstractBaseServiceImpl selectQuestionListByPracticeId(Map map) { -// startPage(); return examQuestionMapper.selectQuestionListByPracticeId(map); } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtUtil.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtUtil.java index d2b17e64b..c09c49c5f 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtUtil.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtUtil.java @@ -1,10 +1,12 @@ package com.ruoyi.framework.jwt; +import cn.hutool.core.util.StrUtil; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.JWTDecodeException; import com.auth0.jwt.interfaces.DecodedJWT; +import com.ruoyi.framework.web.exception.user.UserNotExistsException; import com.ruoyi.framework.web.util.ServletUtils; import java.util.Date; @@ -49,10 +51,14 @@ public class JwtUtil { try { String token = ServletUtils.getRequest().getHeader("Authorization"); DecodedJWT jwt = JWT.decode(token); + String loginName = jwt.getClaim( "loginName" ).asString(); // jwt.getExpiresAt(); - return jwt.getClaim("loginName").asString(); + if (StrUtil.isBlank( loginName )) { + throw new UserNotExistsException(); + } + return loginName; } catch (JWTDecodeException e) { - return null; + throw new UserNotExistsException(); } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/OnlineWebSessionManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/OnlineWebSessionManager.java index aec76c503..e75e16053 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/OnlineWebSessionManager.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/OnlineWebSessionManager.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; + import org.apache.commons.lang3.time.DateUtils; import org.apache.shiro.session.ExpiredSessionException; import org.apache.shiro.session.InvalidSessionException; @@ -21,54 +22,44 @@ import com.ruoyi.system.service.ISysUserOnlineService; /** * 主要是在此如果会话的属性修改了 就标识下其修改了 然后方便 OnlineSessionDao同步 - * + * * @author ruoyi */ -public class OnlineWebSessionManager extends DefaultWebSessionManager -{ - private static final Logger log = LoggerFactory.getLogger(OnlineWebSessionManager.class); - +public class OnlineWebSessionManager extends DefaultWebSessionManager { + private static final Logger log = LoggerFactory.getLogger( OnlineWebSessionManager.class ); + @Override - public void setAttribute(SessionKey sessionKey, Object attributeKey, Object value) throws InvalidSessionException - { - super.setAttribute(sessionKey, attributeKey, value); - if (value != null && needMarkAttributeChanged(attributeKey)) - { - OnlineSession s = (OnlineSession) doGetSession(sessionKey); + public void setAttribute(SessionKey sessionKey, Object attributeKey, Object value) throws InvalidSessionException { + super.setAttribute( sessionKey, attributeKey, value ); + if (value != null && needMarkAttributeChanged( attributeKey )) { + OnlineSession s = (OnlineSession) doGetSession( sessionKey ); s.markAttributeChanged(); } } - private boolean needMarkAttributeChanged(Object attributeKey) - { - if (attributeKey == null) - { + private boolean needMarkAttributeChanged(Object attributeKey) { + if (attributeKey == null) { return false; } String attributeKeyStr = attributeKey.toString(); // 优化 flash属性没必要持久化 - if (attributeKeyStr.startsWith("org.springframework")) - { + if (attributeKeyStr.startsWith( "org.springframework" )) { return false; } - if (attributeKeyStr.startsWith("javax.servlet")) - { + if (attributeKeyStr.startsWith( "javax.servlet" )) { return false; } - if (attributeKeyStr.equals(ShiroConstants.CURRENT_USERNAME)) - { + if (attributeKeyStr.equals( ShiroConstants.CURRENT_USERNAME )) { return false; } return true; } @Override - public Object removeAttribute(SessionKey sessionKey, Object attributeKey) throws InvalidSessionException - { - Object removed = super.removeAttribute(sessionKey, attributeKey); - if (removed != null) - { - OnlineSession s = (OnlineSession) doGetSession(sessionKey); + public Object removeAttribute(SessionKey sessionKey, Object attributeKey) throws InvalidSessionException { + Object removed = super.removeAttribute( sessionKey, attributeKey ); + if (removed != null) { + OnlineSession s = (OnlineSession) doGetSession( sessionKey ); s.markAttributeChanged(); } @@ -79,77 +70,60 @@ public class OnlineWebSessionManager extends DefaultWebSessionManager * 验证session是否有效 用于删除过期session */ @Override - public void validateSessions() - { - if (log.isInfoEnabled()) - { - log.info("invalidation sessions..."); + public void validateSessions() { + if (log.isInfoEnabled()) { + log.info( "invalidation sessions..." ); } int invalidCount = 0; int timeout = (int) this.getGlobalSessionTimeout(); - Date expiredDate = DateUtils.addMilliseconds(new Date(), 0 - timeout); - ISysUserOnlineService userOnlineService = SpringUtils.getBean(ISysUserOnlineService.class); - List userOnlineList = userOnlineService.selectOnlineByExpired(expiredDate); + Date expiredDate = DateUtils.addMilliseconds( new Date(), 0 - timeout ); + ISysUserOnlineService userOnlineService = SpringUtils.getBean( ISysUserOnlineService.class ); + List userOnlineList = userOnlineService.selectOnlineByExpired( expiredDate ); // 批量过期删除 List needOfflineIdList = new ArrayList(); - for (SysUserOnline userOnline : userOnlineList) - { - try - { - SessionKey key = new DefaultSessionKey(userOnline.getSessionId()); - Session session = retrieveSession(key); - if (session != null) - { + for (SysUserOnline userOnline : userOnlineList) { + try { + SessionKey key = new DefaultSessionKey( userOnline.getSessionId() ); + Session session = retrieveSession( key ); + if (session != null) { throw new InvalidSessionException(); } - } - catch (InvalidSessionException e) - { - if (log.isDebugEnabled()) - { + } catch (InvalidSessionException e) { + if (log.isDebugEnabled()) { boolean expired = (e instanceof ExpiredSessionException); String msg = "Invalidated session with id [" + userOnline.getSessionId() + "]" + (expired ? " (expired)" : " (stopped)"); - log.debug(msg); + log.debug( msg ); } invalidCount++; - needOfflineIdList.add(userOnline.getSessionId()); + needOfflineIdList.add( userOnline.getSessionId() ); } } - if (needOfflineIdList.size() > 0) - { - try - { - userOnlineService.batchDeleteOnline(needOfflineIdList); - } - catch (Exception e) - { - log.error("batch delete db session error.", e); + if (needOfflineIdList.size() > 0) { + try { + userOnlineService.batchDeleteOnline( needOfflineIdList ); + } catch (Exception e) { + log.error( "batch delete db session error.", e ); } } - if (log.isInfoEnabled()) - { + if (log.isInfoEnabled()) { String msg = "Finished invalidation session."; - if (invalidCount > 0) - { + if (invalidCount > 0) { msg += " [" + invalidCount + "] sessions were stopped."; - } - else - { + } else { msg += " No sessions were stopped."; } - log.info(msg); + log.info( msg ); } } @Override - protected Collection getActiveSessions() - { - throw new UnsupportedOperationException("getActiveSessions method not supported"); + protected Collection getActiveSessions() { + throw new UnsupportedOperationException( "getActiveSessions method not supported" ); } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/DefaultExceptionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/DefaultExceptionHandler.java index c494522f9..c2f9991d0 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/DefaultExceptionHandler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/DefaultExceptionHandler.java @@ -1,5 +1,6 @@ package com.ruoyi.framework.web.exception; +import com.ruoyi.framework.web.exception.user.UserNotExistsException; import org.apache.shiro.authz.AuthorizationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,7 +40,15 @@ public class DefaultExceptionHandler log.error(e.getMessage(), e); return AjaxResult.error("不支持' " + e.getMethod() + "'请求"); } - + /** + * 拦截未知的运行时异常 + */ + @ExceptionHandler(UserNotExistsException.class) + public AjaxResult userNotFound(UserNotExistsException e) + { + log.error("运行时异常:", e); + return AjaxResult.error(302,"运行时异常:" + e.getMessage()); + } /** * 拦截未知的运行时异常 */ diff --git a/ruoyi-framework/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-framework/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index b5c002265..418b6535e 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -1,9 +1,12 @@ package com.ruoyi.system.service.impl; +import java.nio.file.attribute.UserPrincipalNotFoundException; import java.util.ArrayList; import java.util.List; import com.ruoyi.framework.web.base.AbstractBaseServiceImpl; +import com.ruoyi.framework.web.exception.user.UserException; +import com.ruoyi.framework.web.exception.user.UserNotExistsException; import com.ruoyi.system.domain.*; import com.ruoyi.system.mapper.*; import org.springframework.beans.factory.annotation.Autowired; @@ -57,6 +60,7 @@ public class SysUserServiceImpl extends AbstractBaseServiceImpl + + @@ -26,7 +28,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"