Spring Security可以与Spring Session库配合使用,只需要做一些简单的配置就可以实现一些功能,如(会话过期、一个账号只能同时在线一个、集群session等)。
1)配置session会话超时时间,默认为30分钟,但是Spring Boot中的会话超时时间至少为60秒。
当session超时后, 默认跳转到登录页面。
2)自定义设置session超时后地址
设置session管理和失效后跳转地址
并发控制即同一个账号同时在线个数,同一个账号同时在线个数如果设置为1表示,该账号在同一时间内只能有一个有效的登录,如果同一个账号又在其它地方登录,那么就将上次登录的会话过期,即后面的登录会踢掉前面的登录。
1)修改超时时间
2)设置最大会话数量
3)阻止用户第二次登录
sessionManagement也可以配置 maxSessionsPreventsLogin:boolean值,当达到
maximumSessions设置的最大会话个数时阻止登录。
实际场景中一个服务会至少有两台服务器在提供服务,在服务器前面会有一个nginx做负载均衡,用户访问nginx,nginx再决定去访问哪一台服务器。当一台服务宕机了之后,另一台服务器也可以继续提供服务,保证服务不中断。如果我们将session保存在Web容器(比如tomcat)中,如果一个用户第一次访问被分配到服务器1上面需要登录,当某些访问突然被分配到服务器二上,因为服务器二上没有用户在服务器一上登录的会话session信息,服务器二还会再次让用户登录,用户已经登录了还让登录就感觉不正常了。
解决这个问题的思路是用户登录的会话信息不能再保存到Web服务器中,而是保存到一个单独的库(redis、mongodb、jdbc等)中,所有服务器都访问同一个库,都从同一个库来获取用户的session信息,如用户在服务器一上登录,将会话信息保存到库中,用户的下次请求被分配到服务器二,服务器二从库中检查session是否已经存在,如果存在就不用再登录了,可以直接访问服务了。
2)设置session存储类型
3)测试
使用其中一个服务去登录 >
Session:
<asp:TemplateField HeaderText="用户">
<ItemTemplate>
<%#Session["user_name"]ToString() %>
</ItemTemplate>
</asp:TemplateField>
时间:
<asp:TemplateField HeaderText="时间">
<ItemTemplate>
<%#Eval("绑定的字段名") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox_Session" Text=<%#DateTimeNowToString() %> runat="server"></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
session对象用于在会话范围内,记录每个客户端的访问状态,以便于跟踪每个客户端的 *** 作状态。在会话中存储的信息,在浏览器发出后续请求时可以获取这些会话的有效数据。
在jsp页面中可以直接使用session对象,也可以通过pageContextgetSession()或requestgetSession()方法重新获取session对象。
session对象可以保存用户的登录信息,实现购物车功能等。
>
从客户打开浏览器连接到服务器,到客户关闭浏览器离开这个服务器,称做一个会话。当客户访问服务器是,可能会反复连接这个服务器上的几个页面、反复刷新一个页面或不断地向一个页面提交信息等,服务器应当通过某种方法知道这是同一个客户,这时就需要session对象。
Jquery Json调用在日常工作中非常好用,只需要Json数据就可以了。
session的工作原理如下:
1客户首次访问服务器的一个页面时,服务器就会为该客户分配一个session对象,同时为该session对象指定一个唯一的ID,并且将该ID号发送到客户端并写入到cookie中,使得客户端与服务器端的session建立一一对应关系。
2当客户继续访问服务器上的其他资源时,服务器不再为该客户分配新的session对象,直到客户端浏览器关闭、超时或调用session的invalidate()方法使其失效,客户端与服务器的会话结束。
3当客户重新打开浏览器访问网站时,服务器会重新为客户分配一个session对象,并重新分配sessionID。
session对象主要用于属性 *** 作和会话管理,常用方法如下:
1public void setAttribute(Sting
name, Object
value),设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。
2public Object getAttribute(String
name),在会话范围内获取指定名字的属性的值,返回值类型为object,如果该属性不存在,则返回null。
3public void removeAttribute(String
name),删除指定名字的session属性,若该属性不存在,则出现异常。
4public void
invalidate(),使session失效。可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。
5public String getId(
),获取当前的会话ID。每个会话在服务器端都存在一个唯一的标示sessionID,session对象发送到浏览器的唯一数据就是sessionID,它一般存储在cookie中。
6public void setMaxInactiveInterval(int interval),设置会话的最大持续时间,单位是秒,负数表明会话永不失效。
7public int getMaxInActiveInterval(),获取会话的最大持续时间。
8使用session对象的getCreationTime()和getLastAccessedTime()方法可以获取会话创建的时间和最后访问的时间,但其返回值是毫秒,一般需要使用下面的转换来获取具体日期和时间。
Date creationTime = new
Date(sessiongetCreationTime());
Date accessedTime = new
Date(sessiongetLastAccessedTime());
<%@ page language="java" import="javautil" contentType="text/html;charset=GBK"%>
<%
String
path = requestgetContextPath();
String basePath =
requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 401
Transitional//EN">
<html>
<head>
<base
href="<%=basePath%>">
<title>session对象方法</title>
<meta
>
</head>
<body>
<b>
会话ID:<%=sessiongetId() %>
<br>
是否新会话:<%=sessionisNew()
%><br>
设置和获取属性对象:用户名 =
<%sessionsetAttribute("用户名","陈宁");
%>
<%=sessiongetAttribute("用户名")
%><br>
<%
Date creationTime = new
Date(sessiongetCreationTime());
Date accessedTime = new
Date(sessiongetLastAccessedTime());
%>
会话创建时间:<%=creationTime
%><br>
上次访问时间:<%=accessedTime
%><br>
会话持续时间(s):<%=sessiongetMaxInactiveInterval()
%><br>
<%sessionsetMaxInactiveInterval(12);
%>
修改后的会话持续时间(s):<%=sessiongetMaxInactiveInterval()
%><br>
<%sessioninvalidate();
%>
</b>
</body>
</html>
Jquery Json调用在日常工作中非常好用,只需要Json数据就可以。
以上就是关于SpringSecurity的session管理全部的内容,包括:SpringSecurity的session管理、Shiro Session管理—— *** 作session、Gridview如何获得你写的session值gridview如何获得当前系统时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)