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机制和Web应用程序安全设计的重要案例。通过分析和实践这个项目,开发者...
* 单点登出过滤器:org.jasig.cas.client.session.SingleSignOutFilter * 认证过滤器:org.jasig.cas.client.authentication.AuthenticationFilter * Ticket校验过滤器:org.jasig.cas.client.validation.Cas20...
在JSP页面中,通常使用表单提交用户登录信息到Servlet。Servlet验证用户凭证后,会在Session中存储用户信息,并在响应中设置全局Cookie。JSP页面则可以通过EL(Expression Language)或JSTL标签来获取Session中的...
5. **访问拦截**:为了限制未登录用户访问特定的会员页面,通常会使用过滤器(Filter)或拦截器(Interceptor)。在Struts中,拦截器可以实现这个功能,检查用户是否已登录,如果未登录,则重定向到登录页面。 6. *...
在企业级应用开发中,用户往往需要访问多个相互关联的系统,为了提高用户体验,减少重复登录的繁琐步骤,单点登录(Single Sign-On,简称SSO)技术应运而生。本篇将深入探讨J2EE平台下实现单点登录组件的原理和源码...
单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统或应用中登录后,无需再次认证即可访问其他相互信任的系统或应用。在"单点登录.jsp+servlet,简单版"的项目中,我们可以推测这是一...
单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。在Java Web环境中实现单点登录,可以提高用户体验,减少用户记忆多套账号密码的负担,...
否则,拒绝访问并可能再次引导用户登录。 4. **HTTP客户端库**: 使用Apache HttpClient或其他类似库可以简化与SSOAuth的HTTP通信。这些库提供了处理HTTP请求、响应和管理cookie的高级API,使得在Filter中实现SSO...
ASP.NET MVC权限过滤和单点登录(禁止重复登录) ASP.NET MVC权限控制是指在ASP.NET MVC应用程序中对用户的操作权限进行控制和限制,以确保只有授权用户才能访问和操作指定的资源。权限控制可以通过多种方式实现,...
2. **单点登出过滤器配置**:为了实现单点登出功能,应用服务器需要配置特定的过滤器——`SingleSignOutFilter`。在Web应用的`web.xml`文件中加入如下配置: ```xml <filter> <filter-name>...
单点登录(Single Sign-On,简称SSO)是一种常见的身份验证技术,它允许用户通过一次登录即可访问多个应用程序和服务。这种机制提高了用户体验,同时也简化了系统的安全管理和维护。本文将详细介绍如何在权限管理...
单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后,可以在多个相互关联的应用系统中自由切换,而无需再次进行身份验证。这大大提升了用户体验,减少了频繁输入用户名和密码的繁琐步骤...
单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。Spring Security是Java领域一个强大的安全框架,它提供了全面的安全性解决方案,包括身份...
6. 安全考虑:虽然SSO简化了用户登录过程,但也增加了安全风险。如果CAS服务器被攻破,攻击者可能会获取到所有用户的凭证。因此,对CAS服务器的安全防护至关重要,包括但不限于加密通信、限制非法访问和定期审计。 ...
在实现用户登录验证过滤器时,通常会涉及以下几个关键点: - **存储用户状态**:登录成功后,将用户信息(如token)存储在session或cookie中。 - **过滤器逻辑**:在每个受保护的路由前,检查请求头或请求体中是否...
设置URL的访问规则,例如哪些URL需要用户登录后才能访问,哪些是公开的。 7. **注销功能** 实现单点注销功能,当用户在任一应用中注销时,所有关联的应用都会同时注销用户的登录状态。这通常通过清除SSO令牌并在...
单点登录(SSO)是一种用户登录认证机制,它允许用户在多个应用系统之间,只需进行一次登录认证,即可访问所有相互信任的应用系统。文档中提到的MicroStrategy Web SSO涉及到了外部安全(ExternalSecurity)配置,这...
### Delphi资源—Filter中的模糊过滤 #### 一、模糊过滤概述 在Delphi开发环境中,数据查询与筛选是一项常见的需求。为了满足不同场景下的数据处理需求,Delphi提供了多种方式来实现数据过滤,其中模糊过滤是较为...