`

单一登录过滤器

 
阅读更多
/**
* 单一登录过滤器
*
* @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");
}
分享到:
评论

相关推荐

    ffmpeg filter过滤器基础实例以及全面解析

    FFmpeg过滤器可以是单一的处理单元,也可以是复杂的链式组合。它们被分门别类,如视频过滤器、音频过滤器和通用过滤器等。每一个过滤器都有其特定的用途和参数设置。 在使用FFmpeg过滤器时,首先要确保FFmpeg环境已...

    视频拼接过滤器

    在这个案例中,"视频拼接过滤器"就是这样一个Filter,它的主要任务是接收多个视频源,并将其无缝地整合到一个单一的视频输出中。 描述中提到的“可编译成64位DLL”,意味着这个过滤器代码可以被编译为64位动态链接...

    【作业6.2-1】-管道-过滤器.zip

    过滤器遵循“单一职责原则”,即每个过滤器只做一件事,并做好。 管道-过滤器模式在软件设计中的优势有以下几点: 1. **模块化**:每个过滤器都是独立的,可以单独开发、测试和维护。 2. **可扩展性**:可以通过...

    过滤器和监听器的使用

    在实际开发中,过滤器和监听器的使用应遵循一定的设计原则,如单一职责原则,避免在一个过滤器或监听器中处理过多逻辑,保持代码的可读性和可维护性。同时,合理地配置过滤器和监听器的执行顺序,可以有效地优化应用...

    Servlet过滤器示例代码

    8. **最佳实践**:为了保证过滤器的可扩展性和维护性,应该保持过滤器的职责单一,避免在过滤器中处理过多逻辑。 通过这个"Servlet过滤器示例代码",你可以亲手实践如何创建、配置和使用过滤器,进一步理解它们在...

    java servlet 过滤器

    在本例中,我们将探讨如何使用过滤器来实现用户登录验证,防止未登录用户直接访问受保护的页面。 首先,我们需要创建一个实现了`javax.servlet.Filter`接口的类。这个接口定义了三个方法:`init()`, `doFilter()` ...

    JAVA代码实现管道过滤器

    - **单一职责**:每个过滤器应专注于一项具体任务,如读取数据、修改数据或检查数据完整性。 - **可组合性**:过滤器可以连接在一起形成一个处理链,前一个过滤器的输出成为后一个过滤器的输入。 - **可插入性**...

    企业信息管理系统(15)_设置过滤器

    - 基本过滤器:基于单一字段的条件,如等于、不等于、大于、小于等。 - 复合过滤器:结合多个条件进行筛选,如“与”(AND)和“或”(OR)操作。 - 动态过滤器:根据用户的实时输入或外部变量动态改变筛选条件。...

    Java代码:KWIC程序示例

    Java代码中的KWIC(Key-Word in ...同时,这也是实践面向对象编程理念的好例子,因为每个过滤器都代表了一个单一职责的对象。如果你对信息检索、文本分析或Java编程有兴趣,研究这个程序示例将是一个有价值的练习。

    行业资料-建筑装置-带有双模态单层单组分介质的褶皱过滤器.zip

    “单组分介质”则指的是过滤器使用的材料是单一类型的,这种设计减少了材料间的相互作用,可能有利于保持过滤性能的稳定,并且可能更容易进行回收或处理,符合当前环保理念。 “褶皱过滤器”是过滤器的一种常见形式...

    Zabbix如何使用过滤器实现监控

    在实际使用中,过滤器既可以应用于单一模板中,也可以创建全局的正则表达式,应用于所有的模板。这取决于监控环境的复杂程度和个人喜好。在模板较多,需要频繁修改时,使用全局正则表达式可以显著提高工作效率。 在...

    空调系统过滤器表面真菌类微生物生长预测初级模型研究

    在众多微生物中,真菌由于其生长繁殖特性,尤其容易在空调系统的过滤器表面繁殖并形成生物膜。本文的研究焦点就是构建预测空调系统过滤器表面真菌类微生物生长的初级模型,以实现对空调系统内真菌生长的预测和控制。...

    20.3 CAN过滤筛选器的使用.rar

    - 在多过滤器配置时,要注意过滤器的数量和优先级,以确保满足系统需求。 - 过滤器的设置应根据实际通信需求进行调整,避免遗漏重要数据帧。 - 在高密度通信环境中,合理使用过滤器能显著提升系统性能。 综上所...

    网络游戏-基于指纹多重哈希布隆过滤器的网络取证内容溯源方法.zip

    指纹多重哈希布隆过滤器则是在单一哈希布隆过滤器的基础上进行了扩展,通过使用多个不同的哈希函数和多个独立的布隆过滤器,进一步提高了精确度,减少了误判率。在网络游戏环境中,网络流量庞大,数据包种类繁多,...

    Wireshark网络分析实例集锦—第3章__捕获过滤器技巧.pdf

    ### Wireshark网络分析实例集锦—第3章__捕获过滤器技巧 #### 捕获过滤器技巧概述 本章节重点介绍了Wireshark中的捕获过滤器技巧,这对于提高数据分析效率至关重要。通过合理设置捕获过滤器,可以在抓取网络数据时...

    基于ARM的过滤器控制器的研究.pdf

    【基于ARM的过滤器控制器的研究】这篇论文主要探讨了如何运用ARM处理器内核设计和实现一个过滤器控制器,特别关注了在温室环境监控系统中应用数据融合技术来提高监控精度和控制效果。ARM处理器因其高效能和低功耗...

    详解AngularJS中自定义过滤器

    AngularJS是Google推出的前端框架,其中过滤器(filter)是一种重要的功能,用于格式化数据,使其符合用户界面的需要。过滤器可以在很多场景下使用,比如数据展示时的格式化、对数组元素进行排序等。AngularJS内置了九...

    ASP.NET Core MVC 过滤器的使用方法介绍

    *** Core MVC是微软推出的一个用于构建动态web应用程序的框架,而过滤器是*** Core MVC中用于在请求处理管道中的特定点插入自定义处理逻辑的一种机制。过滤器允许开发者在控制器的Action方法执行前或执行后执行代码...

Global site tag (gtag.js) - Google Analytics