`
橄榄绿
  • 浏览: 277420 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

filter 过滤单点登录用户

 
阅读更多

1、web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
	version="2.4">

<filter>
		<filter-name>CAS LoginFilter</filter-name>
		<filter-class>cn.bidlink.filters.CheckLoginFilter</filter-class>		
	</filter>		
	<filter-mapping>
		<filter-name>CAS LoginFilter</filter-name>
		<url-pattern>*.vm</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>CAS LoginFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.vm</welcome-file>
	</welcome-file-list>

</web-app>

 2、

package cn.bidlink.filters;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.jasig.cas.client.authentication.AttributePrincipal;
import org.springframework.web.context.support.WebApplicationContextUtils;

import cn.bidlink.xcb.ac.dao.IUserDAO;
import cn.bidlink.xcb.ac.model.User;
import cn.bidlink.xcb.common.LogMgr;
import cn.bidlink.xcb.rsc.dao.IStockerDAO;
import cn.bidlink.xcb.rsc.model.StockerMemberInfo;

public class CheckLoginFilter implements Filter {
	protected FilterConfig fConfig = null;
	IUserDAO userDao;
	IStockerDAO stockerDao;
	String userInSession = "USER-IN-SESSION";

	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain fChain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse res = (HttpServletResponse) response;

		AttributePrincipal principal = (AttributePrincipal) req.getUserPrincipal();
		HttpSession session = req.getSession();
		String codes = "";
		if (principal != null) {
			codes = principal.getName();
		}
		if (codes == null || codes.equals("")) {
			fChain.doFilter(req, res);
			return;
		}else{
			ServletContext context = getFilterConfig().getServletContext();
			userDao = (IUserDAO) WebApplicationContextUtils.getWebApplicationContext(context).getBean("userDao");
			User user = userDao.getUserByCode(codes);
			if (user != null) {
				//招标机构用户
				session.setAttribute(userInSession, user);
			} else {
				stockerDao = (IStockerDAO) WebApplicationContextUtils.getWebApplicationContext(context).getBean("stockerDao");
				StockerMemberInfo userinfo = stockerDao.getOutStocker(codes, "0");
				user = new User();
				user.setCode(codes);
				HashMap gh = new HashMap();
				List groups = stockerDao.getUserGroup(codes);
				if (userinfo != null) {
					// 供应商
					LogMgr.bizlog.warn(">>>>>>>>>读取供应商登录信息 end groups.size() : "+ groups.size());
					this.setMemberSession(user,codes,userinfo,session,groups);
				}else{
					// 采购商
					userinfo = stockerDao.getOutStocker(codes, "1");
					if(userinfo != null && !userinfo.equals("")){
						user.setName(userinfo.getCompanyCnName());
						user.setRole(User.ROLE_CGS);
						user.setBidorg(userinfo.getBidorg());
						LogMgr.bizlog.warn(">>>>>>>>>读取采购商登录信息 end groups.size() : "+ groups.size());
					}
				}
				if(userinfo==null){	
					session.invalidate();
				}else{
					for (int i = 0, size = groups == null ? 0 : groups.size(); i < size; i++) {
						gh.put((String) (groups.get(i)), "");
					}
					session.setAttribute(userInSession, user);
					session.setAttribute("GroupList", gh);
					session.setAttribute("bidorg", user.getBidorg());
				}
			}
		}
		fChain.doFilter(request, response);
	}
	/**
	 * 设置供应商Session
	 * @param user
	 * @param codes
	 * @param userinfo
	 * @param session
	 */
	public void setMemberSession(User user,String codes,StockerMemberInfo userinfo,HttpSession session,List groups){
		user.setName(userinfo.getCompanyCnName());
		user.setAccountNo(userinfo.getAccountno());
		user.setRole(User.ROLE_GYS);
		user.setCard(userinfo.getOrgCode());
		user.setBidorg(userinfo.getBidorg());
		user.setPassword(userinfo.getPassword());
		String groupId = "0";
		if (groups != null && groups.size() > 0) {
			groupId = (String) groups.get(0);
		}
		session.setAttribute("GROUPID", groupId);
		session.setAttribute("MEMBERINFO", userinfo);
	}
	
	public void init(FilterConfig fConfig) throws ServletException {
		this.fConfig = fConfig;
	}

	public FilterConfig getFilterConfig() {
		return fConfig;
	}

}

 

分享到:
评论

相关推荐

    sso_bbs(v2)(使用cookie+filter实现单点登录的第二个版本)

    综上所述,sso_bbs(v2)项目是通过Cookie和Filter技术实现单点登录的一个实例,它涉及到用户认证、请求过滤、安全策略等多个方面,是理解SSO机制和Web应用程序安全设计的重要案例。通过分析和实践这个项目,开发者...

    CAS多数据库配置单点登录

    * 单点登出过滤器:org.jasig.cas.client.session.SingleSignOutFilter * 认证过滤器:org.jasig.cas.client.authentication.AuthenticationFilter * Ticket校验过滤器:org.jasig.cas.client.validation.Cas20...

    jsp如何实现单点登录

    在JSP页面中,通常使用表单提交用户登录信息到Servlet。Servlet验证用户凭证后,会在Session中存储用户信息,并在响应中设置全局Cookie。JSP页面则可以通过EL(Expression Language)或JSTL标签来获取Session中的...

    登录 单点登录 带验证码登录

    5. **访问拦截**:为了限制未登录用户访问特定的会员页面,通常会使用过滤器(Filter)或拦截器(Interceptor)。在Struts中,拦截器可以实现这个功能,检查用户是否已登录,如果未登录,则重定向到登录页面。 6. *...

    J2EE单点登录组件源码

    在企业级应用开发中,用户往往需要访问多个相互关联的系统,为了提高用户体验,减少重复登录的繁琐步骤,单点登录(Single Sign-On,简称SSO)技术应运而生。本篇将深入探讨J2EE平台下实现单点登录组件的原理和源码...

    单点登录.zip

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统或应用中登录后,无需再次认证即可访问其他相互信任的系统或应用。在"单点登录.jsp+servlet,简单版"的项目中,我们可以推测这是一...

    最新java实现简单的单点登录

    单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。在Java Web环境中实现单点登录,可以提高用户体验,减少用户记忆多套账号密码的负担,...

    Filter实现的单点登录.pdf

    否则,拒绝访问并可能再次引导用户登录。 4. **HTTP客户端库**: 使用Apache HttpClient或其他类似库可以简化与SSOAuth的HTTP通信。这些库提供了处理HTTP请求、响应和管理cookie的高级API,使得在Filter中实现SSO...

    【ASP.NET编程知识】Asp.net mvc 权限过滤和单点登录(禁止重复登录).docx

    ASP.NET MVC权限过滤和单点登录(禁止重复登录) ASP.NET MVC权限控制是指在ASP.NET MVC应用程序中对用户的操作权限进行控制和限制,以确保只有授权用户才能访问和操作指定的资源。权限控制可以通过多种方式实现,...

    cas实现单点登录

    2. **单点登出过滤器配置**:为了实现单点登出功能,应用服务器需要配置特定的过滤器——`SingleSignOutFilter`。在Web应用的`web.xml`文件中加入如下配置: ```xml &lt;filter&gt; &lt;filter-name&gt;...

    单点登录CAS与权限管理框架Shiro集成

    单点登录(Single Sign-On,简称SSO)是一种常见的身份验证技术,它允许用户通过一次登录即可访问多个应用程序和服务。这种机制提高了用户体验,同时也简化了系统的安全管理和维护。本文将详细介绍如何在权限管理...

    单点登录客户端代码

    单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后,可以在多个相互关联的应用系统中自由切换,而无需再次进行身份验证。这大大提升了用户体验,减少了频繁输入用户名和密码的繁琐步骤...

    单点登录实现 Spring_security+CAS

    单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。Spring Security是Java领域一个强大的安全框架,它提供了全面的安全性解决方案,包括身份...

    单点登录-cas学习项目源码

    6. 安全考虑:虽然SSO简化了用户登录过程,但也增加了安全风险。如果CAS服务器被攻破,攻击者可能会获取到所有用户的凭证。因此,对CAS服务器的安全防护至关重要,包括但不限于加密通信、限制非法访问和定期审计。 ...

    过滤器验证用户登录.rar

    在实现用户登录验证过滤器时,通常会涉及以下几个关键点: - **存储用户状态**:登录成功后,将用户信息(如token)存储在session或cookie中。 - **过滤器逻辑**:在每个受保护的路由前,检查请求头或请求体中是否...

    spring boot 集成kisso单点登入

    设置URL的访问规则,例如哪些URL需要用户登录后才能访问,哪些是公开的。 7. **注销功能** 实现单点注销功能,当用户在任一应用中注销时,所有关联的应用都会同时注销用户的登录状态。这通常通过清除SSO令牌并在...

    mstr单点登录.pdf

    单点登录(SSO)是一种用户登录认证机制,它允许用户在多个应用系统之间,只需进行一次登录认证,即可访问所有相互信任的应用系统。文档中提到的MicroStrategy Web SSO涉及到了外部安全(ExternalSecurity)配置,这...

    delphi资源-Filter中的模糊过滤

    ### Delphi资源—Filter中的模糊过滤 #### 一、模糊过滤概述 在Delphi开发环境中,数据查询与筛选是一项常见的需求。为了满足不同场景下的数据处理需求,Delphi提供了多种方式来实现数据过滤,其中模糊过滤是较为...

Global site tag (gtag.js) - Google Analytics