java ssh2登陆,session的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java ssh2登陆,session的问题相关的知识,希望对你有一定的参考价值。

登陆后,把登陆用户信息保存在session中,然后进入主界面,在使用其他功能的时候,我执行struts2的拦截器,判断session是否存在,如果存在这.invoke();如果不存在转到登陆界面。
但是实际上一旦我登陆成功后,保存在session中,我进行什么操作session中都是有值的。感觉什么用。除非remove掉session中的用户记录;

请高手指点下登陆的整个流程。包括session在其中起的作用;讲的深入些。谢谢
哎呀,总是感觉我这样做的思路问题啊;

我的目的是:如果用户登陆了。那么他就可以进行访问登陆后的有关信息了。如果没有登陆,即使他复制登陆后的地址重新打开也是无效的;就这点东西,想了好几天了。在线等高手指教。

你拦截器没写对吧
给你个参考:

public class UserAuthority extends AbstractInterceptor

private static final long serialVersionUID = 4236641584535253696L;

public String intercept(ActionInvocation invocation) throws Exception
//请求取得相关的实例
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
//取得名为Session的属性
String user = (String)session.get("user");
System.out.println("到拦截器这里了!");
//如果没有登录
if(user!=null)
return invocation.invoke();
else
return "noLogin";



参考技术A session就是与网站的连接,访问了就建立了,登陆就是把信息放入session中保存起来,比如说是一个user对象,如果这个user你获得的是null就说明没有登录呗 参考技术B 你的思路没问题.就是这样处理的.
是不是的session失效时间太长了?
你可以注销以后,清空一下浏览器里的文件,再粘贴地址试试本回答被提问者采纳

利用session+application+cookie 实现单态登陆,且解决浏览器意外关闭的问题

最近在帮朋友做一个购物网站,里面涉及到了登陆的问题。其中包括后台管理员的登陆和用户的登陆。

在这个网站中,设计了后台管理员单态登陆,即一个账号只能有一个登陆实例。很容易想到的就是用application实现,在application中放置一个hashmap,储存登陆的管理员信息。同时为了实现登陆超时,也在session中存放登陆对象,通过设置session的listener监控session的消亡,移除application中的对象。那么问题来了,如果用户因为断电或者任性,非法关闭了浏览器,再打开浏览器,显然application中还存在上一次的登陆对象,不能再次登陆了,这样就造成了用户永远无法登陆的问题。

在网上查了一下,很多人遇到这个问题,万能的网友给的建议是用心跳包的方式,判断用户离线,但是本人觉得这样方法太过占用资源。于是有了以下这个方法。核心思想是,利用cookie保存成功登陆的sessionId,然后在application对象再增加一个hashmap,key是sessionId,value依然是管理员对象。每次打开登陆界面时,首先检查cookie,如果存在就取出sessionId,然后查看application中保存sessionId的hashmap,如果存在这个sessionId,就取出管理员信息,并放在新的session中。

PS:浏览器的session机制是这样的,每次打开浏览器服务器会为这个浏览器创建一个新的session,它的消失不受浏览器的关闭控制。而是服务器自动回收,但是如果浏览器关闭再打开,就会产生一个新的session,但并不意味着服务器中找不到上一次打开浏览器的session。所以将sessionId保存在cookie中,相当于变相在浏览器中找到上一次的session并进行操作。

源代码如下

(1) session 监听器代码


 

  1. ServletContext application;  
  2.   
  3.     @Override  
  4.     public void sessionCreated(HttpSessionEvent arg0)  
  5.     {  
  6.          ServletContext application=arg0.getSession().getServletContext();  
  7.          HashMap<String,ManagerForm>allManagerBySessionId=( HashMap<String,ManagerForm>)application.getAttribute("allManagerBySessionId");  
  8.          if (null==allManagerBySessionId)  
  9.          {  
  10.              allManagerBySessionId=new HashMap<String,ManagerForm>();  
  11.              application.setAttribute("allManagerBySessionId",allManagerBySessionId);  
  12.          }  
  13.          System.out.println("创建");  
  14.     }  
  15.   
  16.     @SuppressWarnings("unchecked")  
  17.     @Override  
  18.     public void sessionDestroyed(HttpSessionEvent arg0)  
  19.     {  
  20.           
  21.         ManagerForm form = (ManagerForm) arg0.getSession().getAttribute("user");  
  22.         application=arg0.getSession().getServletContext();  
  23.         HashMap<String, ManagerForm>hashMap=(HashMap<String, ManagerForm>)application.getAttribute("allManager");  
  24.           
  25.         if (hashMap!=null)  
  26.         {  
  27.             if (null!= hashMap.remove(form.getId().toString()))  
  28.             {  
  29.                 System.out.println("移除");  
  30.             }  
  31.               
  32.         }  
  33.         HttpSession session=arg0.getSession();  
  34.         HashMap<String,ManagerForm>allManagerBySessionId=( HashMap<String,ManagerForm>)application.getAttribute("allManagerBySessionId");  
  35.         if (allManagerBySessionId.containsKey(session.getId()))  
  36.         {  
  37.             allManagerBySessionId.remove(session.getId());  
  38.             application.setAttribute("allManagerBySessionId",allManagerBySessionId);  
  39.         }  
  40.           
  41.     }  


(2)登陆校验页面代码

 

  1. //保存SesionID至浏览器cookie  
  2.                     Cookie cookie=new Cookie("user",request.getSession().getId());  
  3.                     cookie.setMaxAge(3600);  
  4.                     response.addCookie(cookie);  
  5.                     //向特定hashMap中保存form对象  
  6.                       
  7.                     HashMap<String,ManagerForm>allManagerBySessionId=( HashMap<String,ManagerForm>)appliction.getAttribute("allManagerBySessionId");  
  8.                       
  9.                     allManagerBySessionId.put(request.getSession().getId(),userForm);  
  10.                       


(3) 浏览器登陆页面校验代码

 

    1. <%  
    2.         Cookie[] allCookies = request.getCookies();  
    3.             String savedSessionId = "";  
    4.             if (allCookies != null)  
    5.             {  
    6.                 for (int i = 0; i < allCookies.length; i++)  
    7.                 {  
    8.                     if (allCookies[i].getName().equals("user"))  
    9.                     {  
    10.                         savedSessionId = allCookies[i].getValue();  
    11.                         break;  
    12.                     }  
    13.   
    14.                       
    15.                 }  
    16.               
    17.                 HashMap<String, ManagerForm> allManagerBySessionId = (HashMap<String, ManagerForm>) application  
    18.                             .getAttribute("allManagerBySessionId");  
    19.                     if (allManagerBySessionId.containsKey(savedSessionId))  
    20.                     {  
    21.                         ManagerForm form = allManagerBySessionId  
    22.                                 .get(savedSessionId);  
    23.                         session.setAttribute("user", form);  
    24.                         response.sendRedirect(request.getContextPath()+"/background/managerIndex.jsp");  
    25.                         return;  
    26.                     }  
    27.             }  
    28.     %> 

以上是关于java ssh2登陆,session的问题的主要内容,如果未能解决你的问题,请参考以下文章

7天免登陆

org.apache.shiro.session.InvalidSessionException: java.lang.IllegalStateException: getAttribute: Ses

SSH2 登陆 LOCALHOST 为啥无法登陆?其它机器可以连接

RTC,登陆后添加权限值

PHP7.3.5安装ssh2扩展

SSH2 No Session found for current thread原因