123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- /**
- * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
- */
- package com.jeeplus.common.security.shiro.session;
- import java.io.Serializable;
- import java.util.Collection;
- import java.util.Date;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.shiro.session.InvalidSessionException;
- import org.apache.shiro.session.Session;
- import org.apache.shiro.session.UnknownSessionException;
- import org.apache.shiro.session.mgt.SessionContext;
- import org.apache.shiro.session.mgt.SessionKey;
- import org.apache.shiro.session.mgt.SimpleSession;
- import org.apache.shiro.web.servlet.Cookie;
- import org.apache.shiro.web.servlet.ShiroHttpServletRequest;
- import org.apache.shiro.web.servlet.SimpleCookie;
- import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
- import org.apache.shiro.web.util.WebUtils;
- import com.jeeplus.common.utils.StringUtils;
- /**
- * 自定义WEB会话管理类
- * @author jeeplus
- * @version 2014-7-20
- */
- public class SessionManager extends DefaultWebSessionManager {
- public SessionManager() {
- super();
- }
-
- @Override
- protected Serializable getSessionId(ServletRequest request, ServletResponse response) {
- // 如果参数中包含“__sid”参数,则使用此sid会话。 例如:http://localhost/project?__sid=xxx&__cookie=true
- String sid = request.getParameter("__sid");
- if (StringUtils.isNotBlank(sid)) {
- // 是否将sid保存到cookie,浏览器模式下使用此参数。
- if (WebUtils.isTrue(request, "__cookie")){
- HttpServletRequest rq = (HttpServletRequest)request;
- HttpServletResponse rs = (HttpServletResponse)response;
- Cookie template = getSessionIdCookie();
- Cookie cookie = new SimpleCookie(template);
- cookie.setValue(sid); cookie.saveTo(rq, rs);
- }
- // 设置当前session状态
- request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE,
- ShiroHttpServletRequest.URL_SESSION_ID_SOURCE); // session来源与url
- request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID, sid);
- request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_IS_VALID, Boolean.TRUE);
- return sid;
- }else{
- return super.getSessionId(request, response);
- }
- }
-
- @Override
- public void validateSessions() {
- super.validateSessions();
- }
-
- protected Session retrieveSession(SessionKey sessionKey) {
- try{
- return super.retrieveSession(sessionKey);
- }catch (UnknownSessionException e) {
- // 获取不到SESSION不抛出异常
- return null;
- }
- }
- public Date getStartTimestamp(SessionKey key) {
- try{
- return super.getStartTimestamp(key);
- }catch (InvalidSessionException e) {
- // 获取不到SESSION不抛出异常
- return null;
- }
- }
- public Date getLastAccessTime(SessionKey key) {
- try{
- return super.getLastAccessTime(key);
- }catch (InvalidSessionException e) {
- // 获取不到SESSION不抛出异常
- return null;
- }
- }
- public long getTimeout(SessionKey key){
- try{
- return super.getTimeout(key);
- }catch (InvalidSessionException e) {
- // 获取不到SESSION不抛出异常
- return 0;
- }
- }
- public void setTimeout(SessionKey key, long maxIdleTimeInMillis) {
- try{
- super.setTimeout(key, maxIdleTimeInMillis);
- }catch (InvalidSessionException e) {
- // 获取不到SESSION不抛出异常
- }
- }
- public void touch(SessionKey key) {
- try{
- super.touch(key);
- }catch (InvalidSessionException e) {
- // 获取不到SESSION不抛出异常
- }
- }
- public String getHost(SessionKey key) {
- try{
- return super.getHost(key);
- }catch (InvalidSessionException e) {
- // 获取不到SESSION不抛出异常
- return null;
- }
- }
- public Collection<Object> getAttributeKeys(SessionKey key) {
- try{
- return super.getAttributeKeys(key);
- }catch (InvalidSessionException e) {
- // 获取不到SESSION不抛出异常
- return null;
- }
- }
- public Object getAttribute(SessionKey sessionKey, Object attributeKey) {
- try{
- return super.getAttribute(sessionKey, attributeKey);
- }catch (InvalidSessionException e) {
- // 获取不到SESSION不抛出异常
- return null;
- }
- }
- public void setAttribute(SessionKey sessionKey, Object attributeKey, Object value) {
- try{
- super.setAttribute(sessionKey, attributeKey, value);
- }catch (InvalidSessionException e) {
- // 获取不到SESSION不抛出异常
- }
- }
- public Object removeAttribute(SessionKey sessionKey, Object attributeKey) {
- try{
- return super.removeAttribute(sessionKey, attributeKey);
- }catch (InvalidSessionException e) {
- // 获取不到SESSION不抛出异常
- return null;
- }
- }
- public void stop(SessionKey key) {
- try{
- super.stop(key);
- }catch (InvalidSessionException e) {
- // 获取不到SESSION不抛出异常
- }
- }
-
- public void checkValid(SessionKey key) {
- try{
- super.checkValid(key);
- }catch (InvalidSessionException e) {
- // 获取不到SESSION不抛出异常
- }
- }
-
- @Override
- protected Session doCreateSession(SessionContext context) {
- try{
- return super.doCreateSession(context);
- }catch (IllegalStateException e) {
- return null;
- }
- }
- @Override
- protected Session newSessionInstance(SessionContext context) {
- Session session = super.newSessionInstance(context);
- session.setTimeout(getGlobalSessionTimeout());
- return session;
- }
-
- @Override
- public Session start(SessionContext context) {
- try{
- return super.start(context);
- }catch (NullPointerException e) {
- SimpleSession session = new SimpleSession();
- session.setId(0);
- return session;
- }
- }
- }
|