shiro 删除用户session_shiro 一个项目多个系统sessionid赋值 (getsession 重载)

Shiro Security是非常不错的Security框架

最近在我的项目中进行相关整合,shiro不难,难就难在如何对已经成熟的系统进行整合

作为相关切入点,我也考虑了很久,整体运用上了如张开涛大佬所说

对于Subject我们一般这么使用:

1、身份验证(login)

2、授权(hasRole*/isPermitted*或checkRole*/checkPermission*)

3、将相应的数据存储到会话(Session)

4、切换身份(RunAs)/多线程身份传播

5、退出

回归标题,正常整合过后,基本可以正确的进行登录与登出

那么开始进行细节休整

大体介绍我们的系统架构是springmvc进行开发,一个项目里分出了两套系统,系统与系统间的区分仅仅只是 通过url路径上的不同,来表现。那么现在就出现了一种情况,系统1基本用户都能登入,而系统2却只有相关权限人才能登入。

表面上视乎能在登陆上做控制,比如login的时候通过权限判断就可以做到。那么这时候考虑的是如果用户之间通过url强行进入呢。

比如系统1用户登录,直接修改url进入系统2。此时属于非法访问。

正常我们会在filter内做过滤,也好做,在相关登录逻辑内对session赋予标记,在filter做过滤就over了,不符合直接logout。

想到这里,作为一个shiro框架使用者是不是感觉shiro貌似没起作用。

于是思考一个比较合理的方案,于是决定当用户登陆系统时,对sessionid进行赋值,系统1则在sessionid前+上相关字符串标记session为系统1用户。系统2则在sessionid前+上相关字符串标记session为系统2用户。

需求清晰,那么进行可行性分。

那么结合shiro中的session管理,开始做起了调查。

首先进行是的shiro如何修改sessionid,这能找却不能满足我的需求。因为市面上的他们都是以单系统,或者双项目双系统进行写的。完全不能符合我想要的。

一般都是这么做的

**

**

上面的解决方案是对不同项目进行不同的jsessionid名的配置

但我一个项目里怎么可能出现两个shiro,不符合我的要求

于是考虑shiro内置处理session我要做点手脚。

首先是查到了sessionid生成器

自定义了一个id生成器

public class SysSessionIdGenerator implements SessionIdGenerator {

@Override

public Serializable generateId(Session session) {

if(session.getAttribute("sysType")!=null){

return session.getAttribute("sysType").toString()+"_"+UUID.randomUUID().toString();

}

return UUID.randomUUID().toString();

}

}

主要实现SessionIdGenerator  generateId的方法。这里可以看见我吧sysType加到uuid前面。

然后就是注入给shiro使用

配置需要加入

sessionDAO 也要记得注入给 sessionManager 这里我就不写了

那么问题又来了,逻辑上不上应该生成session的时候调用吗,那么shiro的session是在什么时候生成的呢。

我翻了翻源码

subject.getSession()

这个get方法实现的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值