用户名的共享内存key设置,不再用cookie,key用requestid,shiro requset获取不到就用mvc的request
由于有些请求不在shiro权限范围,shiro实体获取不到,所以request获取不到,但是mvc的requestid一定有,都是一样的,他们只是包装关系
cookie的方式不再用,有时嵌套iframe获取不到,延时等原因
例如
itm/cust/dispatchCustomListQuery.action=authc/anon 没有放入权限控制,所以他调用拿teamId()shiro为空了 对
/itm/zhijianapp/queryDaiZhiJian.action=authc
set代码:
HttpServletRequest request= (HttpServletRequest) servletRequest;
String jsession = request.getRequestedSessionId();
//((RemoteSessionRequest)((ShiroHttpServletRequest)request).getRequest()).getSession().setAttribute(jsession+"username",userName);
WebSession webSession= WebSessionManager.getInstance().getSession(jsession+"username");
if(webSession==null){
webSession=WebSessionManager.getInstance().createSession(jsession+"username");
}else{
webSession=WebSessionManager.getInstance().getSession(jsession+"username");
}
webSession.setAttribute(jsession+"username", userName);
get代码:
HttpServletRequest request1 =(HttpServletRequest) ((WebSubject)SecurityUtils.getSubject()).getServletRequest();//由于这个方法有比较乱的调用,导致shiro有时为空
此时requestid即jsessionid找不到,直接用action的request获取即可
// ShiroHttpServletRequest srequest=(ShiroHttpServletRequest) ((StrutsRequestWrapper) ServletActionContext.getRequest()).getRequest();
HttpServletRequest srequest=(HttpServletRequest)ServletActionContext.getRequest();
String jsession=srequest.getRequestedSessionId();
System.out.print("===========getTeamId jsession");
System.out.print("===========getTeamId jsession========="+jsession);
//cookie的方式不再用,有时嵌套iframe获取不到,延时等原因
Cookie[] cookies = request1.getCookies();
String username=getCookieValue(cookies, "username");
WebSession webSession= WebSessionManager.getInstance().getSession(jsession+"username");
if(webSession==null){
webSession=WebSessionManager.getInstance().createSession(jsession+"username");
}else{
webSession=WebSessionManager.getInstance().getSession(jsession+"username");
}
username =webSession.getAttribute(jsession+"username")+"";
相关推荐
由于Cookie不支持直接更新,你需要设置相同的键(key)但不同的值。例如,如果我们想改变上面的用户名,可以这样操作: ```javascript document.cookie = "username=Jane Doe; expires=Thu, 31 Dec 2099 23:59:59 ...
设置Cookie为`Response.Cookies["key"] = "value"`,读取为`value = Request.Cookies["key"]`。Cookie节省服务器资源,但存储空间有限,可能被禁用或删除,不适合存储关键信息。 5. **使用Application变量**: ...
单点登录(Single Sign-On,简称SSO)是一种身份验证机制,它允许用户在多个应用程序和服务之间共享身份信息,而无需多次输入用户名和密码。这种机制不仅提高了用户体验,减少了用户的记忆负担,同时也简化了系统的...
只需确保所有子域名都配置为使用相同的Cookie名称和保护设置,然后处理跨域Cookie的读取和验证。 4. 运行在不同版本.NET下的应用程序间实现SSO: 不同版本的.NET框架通常不直接影响SSO实现,关键在于保持一致的...
然而,由于Cookie具有域名限制,不能在不同域名之间共享,因此实现跨域单点登录的关键在于找到一种方式使得各个子系统能够共享同一个Token。本文介绍的方法主要是通过页面跳转来实现这一点。 #### 三、实施方案 ...
- **Cookie共享**:Cookie是存储在客户端的数据,适用于存储用户特定信息,如用户名,通过`new Cookie("key", "value")`创建Cookie,`response.addCookie(cookie)`将其添加到响应中。 - **隐藏表单字段**:通过在...
- **设置Secret Key**:用于签名的密钥,是服务器和客户端共享的。 - **选择Signature Algorithm**:常见的有HS256、HS384、HS512等,C#中通常使用HS256。 - **签名和编码**:使用选定的算法和Secret Key对...
例如,在`receive.aspx`中,可以使用`string username = Request.QueryString["username"]`来读取传递过来的用户名。 ### 2. 使用POST方式传递数据 POST方式比GET更安全,适用于传递大量数据。在发送页面,可以...
2. **设置Session值**:服务器可以通过`$_SESSION['key'] = 'value'`这样的方式为Session设置特定的键值对,比如`$_SESSION['isLoggedIn'] = true`表示用户已登录。 3. **检查Session状态**:在用户访问受保护的...
LTPA利用共享密钥加密cookie中的用户凭证,确保在信任域内的不同系统间传递用户身份信息时的安全性。WebSeal作为TAM的关键组件,充当反向代理的角色,对所有请求进行拦截并处理。 **配置过程概述:** 1. 在WAS...
如果前端和后端不在同一域名下,需要后端开启CORS(跨源资源共享)支持,或者使用JSONP(JSON with Padding)等跨域解决方案。 5. **注意事项** - 确保服务器端有处理Session相关请求的接口。 - Session数据存储...
传统的有状态登录机制,依赖于服务器端的Session和客户端的Cookie来维持用户状态,但这种方式存在一些问题,如服务器存储压力大,若需扩展到集群,还需处理Session共享。为了解决这些问题,无状态登录应运而生。 **...
- 在JSP页面中,可以使用 `<jsp:setProperty>` 或 `<c:set>` 等标签来设置Session变量。 - 通过 `("key") %>` 可以在页面中显示Session中的数据。 #### 五、示例:简单的邮件系统 假设有一个简单的邮件系统,由...
在对媒体资源进行编辑时, 利用的是用所见即所得的编辑器, 这使得使用者无需经过专业培训,就能掌握 Moodle 的基本操作与编辑。 Moodle 注重全 面的安全性,所有的表单都被检查,数据都被校验, cookie 是被加密的...
在微服务架构中,传统的cookie+session机制不再适用,因为它们难以跨服务共享且增加服务器存储负担。相比之下,JWT具有以下优点: - 无状态:JWT包含了所有认证信息,服务器无需存储会话状态。 - 可分布式:由于无...
这里我们使用了`HS256`算法,这是一种基于哈希的消息认证码(HMAC)算法,需要一个共享的密钥来验证签名。如果你想要验证一个JWT,可以这样做: ```python # 验证JWT try: decoded_payload = jwt.decode(encoded_...
`Session`对象用于存储用户会话期间的数据,实现跨页面的数据共享。例如,存储用户ID: ```csharp Session["UserID"] = "123"; int userId = (int)Session["UserID"]; ``` 5. **ViewState与ControlState** `...
Session共享的问题: 1、tomcat做集群配置session复制。如果集群中节点很多,会形成网络风暴。推荐节点数量不要超过5个。 2、分布式架构。拆分成多个子系统。(本项目使用) ### shop-order(订单系统) * 当...
- 设置Domino会话验证方式为多服务器,并指定使用Web SSO配置。 - 重启Domino服务。 #### DSAPI部署 DSAPI是一种特殊的接口,用于实现Domino服务器与外部系统之间的SSO。具体部署步骤如下: 1. 在Domino Data...
- 私钥生成:使用OpenSSL工具,如`openssl genrsa -out ./private_key.pem 1024`生成私钥,`openssl rsa -in ./private_key.pem -pubout -out ./public_key.pem`生成公钥。 - **生成Token**:使用`jsonwebtoken`库...