`

单一登录过滤器

 
阅读更多
/**
* 单一登录过滤器
*
* @author vernon.chen
*/
public class SsoFilter implements Filter {

private static Logger logger = LoggerFactory.getLogger(SsoFilter.class);

// @Autowired
private SsoManager ssoManager;

/**
* Default constructor.
*/
public SsoFilter() {
// nothing to do.
}

/**
* @see Filter#destroy()
*/
public void destroy() {
// nothing to do.
}

/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest httpReq = (HttpServletRequest) request;
HttpServletResponse httpRes = (HttpServletResponse) response;

HttpSession session = httpReq.getSession();

String sessionId = session.getId();

UserDto userDto = (UserDto) SecurityUtils.getSubject().getSession().getAttribute(SysConstants.LOGIN_USER_INFO);

String requestURI = httpReq.getRequestURI();

if (null != userDto && //
(false == requestURI.startsWith(httpReq.getContextPath() + "/static/"))) {// 1-用户已登录

String accountId = "";// 登录账号ID

if (userDto instanceof AccountDto) {
accountId = ((AccountDto) userDto).getAccountId();
} else if (userDto instanceof CompanyAccountDto) {
accountId = ((CompanyAccountDto) userDto).getAccountId();
}

Sso sso = this.ssoManager.findByAccountId(accountId);

String sessionId4lastLogin = sso.getSessionId();

if (false == sessionId.equals(sessionId4lastLogin)) {// 2-但不是最后一次登录时的SessionId

boolean committed = httpRes.isCommitted();

if (false == committed) {
httpRes.sendRedirect(httpReq.getContextPath() + "/logout?isKickedOut=true");// 3-用户登出
return;
}

}
}

// pass the request along the filter chain
chain.doFilter(request, response);
}

/**
* @see Filter#init(FilterConfig)
*/
public void init(
FilterConfig fConfig) throws ServletException {
ServletContext context = fConfig.getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
ssoManager = (SsoManager) ctx.getBean("ssoManager");
}
分享到:
评论

相关推荐

    过滤器模式

    过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它...

    TagFilter:单一选择芯片过滤器,概念与Google Maps Vehicle选择有关

    标签过滤器 正在安装 添加以下 allprojects { repositories { ... maven { url 'https://jitpack.io' } } } 将库导入gradle dependencies { implementation '...

    基于过滤器一封装器组合模型的故障特-k征z选择算法 (2007年)

    利用过滤器法运行速度快和封装器法精度高的优点,提出了一种新的...运用滚动轴承故障模拟试验的数据对所提出的算法进行了验证,结果表明,相比单一的过滤器法或封装器法,该算法能够同时提高特征选择的性能和效率。

    论文研究-快速检测RFID复制标签的算法研究.pdf

    首先,标签内存储[k]个哈希函数,标签在接收到阅读器的查询帧后多次回复阅读器构造虚拟克鲁姆过滤器,找到阅读器通信区域内的标签集合[M];然后,[M]中标签通过多轮哈希运算使得阅读器构建时隙状态向量,目的是给每...

    基于RFID应用的综合性数据清洗策略 (2009年)

    该机制由局部过滤器和全局过滤器组成,局部过滤器处理单个阅读器接收的数据,通过时间延迟对数据按时间戳排序,并根据RFID数据流的分布情况设定不同的约束条件删除多读数据;而全局过滤器处理多个阅读器接收的数据,...

    数据关联输入拼音过滤控件 DataHint

    数据库数据关联输入拼音自动过滤控件,内含 Caption 属性编辑器。 只在 Delphi7 下测试通过,曾试图移植到 Delphi2009,但是 ChineseSpell.pas 单元出错,哪位高人修改后,请给我传一份,感激不尽。 (抱歉,关键部分...

    php实现验证邮箱格式的代码实例

    filter_var() 函数通过指定的过滤器过滤一个变量。 语法: filter_var(variable, filter, options) 参数介绍: variable,(必需)规定要过滤的变量。 filter,(可选)规定要使用的过滤器的 ID。默认是 FILTER_...

    api-gateway-service

    api网关服务 µService的作用是什么...Zuul的实现基于过滤器,该过滤器在请求处理的不同步骤中起作用: 在路由之前预先执行 ROUTE-过滤器,可路由到后端服务 POST-由后端服务处理路由的请求后执行 错误 如何设置? 您

    RUNMEAN:版本 3.0(2006 年 9 月)非常快速的运行均值(又名移动平均)过滤器-matlab开发

    在伪代码中: Y(i) = sum(X(j)) / (2*M+1), 对于 j = (iM):(i+M), and i=1:length(X) 对于矩阵,Y = RUNMEAN(X,M) 或 RUNMEAN(X,M,[]) 对 X 的第一个非单一维度进行运算。 RUNMEAN(X,M,DIM) 计算沿维度 DIM 的运行...

    drive_ros_localize_odom_fusion:融合来自各种来源的测距消息

    里程计msg + imu msg(通过消息过滤器同步) 单一里程计味精 单IMG消息 校正步骤的可能输入: 里程计msg + imu msg(通过消息过滤器同步) 单一里程计味精 单IMG消息 校正步速可能会慢于预测率。 当前支持的...

    LEAP_CrossoverShop分频器设计教程.pdf

    EnclosureShop提供了喇叭单元和音箱设计,而CrossoverShop则提供了设计过滤器布局技术的工具。通过两者的合作,这两种程序希望能组成一个完整的设计和分析软件。 EnclosureShop比较特殊的功能包括有衍射分析、外壳...

    pydocsearch:用于快速查找文件(例如,材料安全数据表)的单一用途的严肃文件搜索 GUI

    - 列表或表格显示与过滤器匹配的文档,如果过滤器为空,则显示所有文档。 - 当有新文档刚刚添加到索引时,它们将以红色显示在列表的顶部,这意味着它们需要添加标题和关键字。 - 双击项目时,文档将在新窗口中打开 ...

    Blind Motion Deblurring Using Image Statistics翻译

    假设由一个匀速运动引起的模糊,我们可以把调查局限于一维箱式过滤器模糊。这使我们能够把期望的梯度分布建模为一个关于模糊核宽度的函数。这些分布在区别不同模糊的区域方面功能出奇的强大。该方法在含有丰富纹理的...

    TPA3116D2 数字功放参考设计

    可编程功率限制,差分/单端输入,带有单过滤器单声道配置的立体声和单声道模式,单一电源减少了组件数量,集成的自我保护电路包括过压、欠压、过热、DC检测、和带有错误报告的短路保护,21V时,2x50W被驱动进入一个4Ω...

    pentaho-transparent-authentication:Pentaho商业智能服务器的插件,提供透明的身份验证功能

    PentahoTransparentAuthentication Pentaho透明身份验证是Pentaho BA Server的插件,以Spring安全性过滤器和一堆支持类的形式为平台提供了附加的身份验证和登录功能。 该项目的目标是提供一种透明的身份验证和自动...

    pentaho-authentication-ext:Pentaho商业智能服务器的身份验证扩展机制[警告! 该项目已移至https

    该项目已移至(作为Maven模块)五重认证Pentaho商业智能服务器的身份验证扩展机制pentaho-authentication-ext是Pentaho BI Server的插件,以...安全性过滤器和一堆支持类的形式为平台提供了附加的身份验证和登录功能...

    基于贝叶斯分类的邮件过滤方法及模型研究 (2006年)

    传统邮件过滤方法单一,过滤精度不高,已不能很好地满足需求。结合规则过滤技术,分析了基于文本内容的贝叶斯分类器实现的关键技术与方法,并给出核心过滤算法在邮件分类中的实现具体方法及过程,进而完成垃圾邮件的...

    TrueCrypt的国内延伸版本CnCrypt V1.11(单一文件绿色版)

    菜单增加关联资源管理器,取消关联资源管理器选项 资源管理器菜单修改为子菜单方式 属性中增加占用磁盘空间项,可以显示动态卷目前已经占用的磁盘空间 在加密卷右键菜单上增加了创建桌面快捷方式菜单项 Mount命令行...

    Fast Iterative Truncated Arithmetic Mean Filter(FITM滤波器):ITM/FITM滤波器-matlab开发

    演示代码包括: 1) 单型噪声抑制一些进一步的演示代码可以在 WITM 过滤器的代码中找到https://www.mathworks.com/matlabcentral/fileexchange/48585-weighted-iterative-truncated-mean-filter 和 ITTM 过滤器...

    AlternateFontExport导出字体为图片V1.690安装免费版

    JPG,GIF)工具,能把字体导出为图片,给有特别需求的人用用哦,快速预览字体成千上万的文件夹或驱动器的字体,先进的过滤和搜索选项,查看能力压缩文件(一个或多个)和预览数百字体单一或10列!它支持完整的管理...

Global site tag (gtag.js) - Google Analytics