`
我是温浩然
  • 浏览: 97177 次
文章分类
社区版块
存档分类
最新评论

自定义单点登录项目 (1)

 
阅读更多

这是(1),打算写一个系列

惯例,

我是温浩然:

上一个月,研究了两个周的CAS单点登录。因为是发布到阿里云服务器上,项目中的证书文件,与阿里云服务器冲突,所以,就自己写了一套单点登录页面。

先说一下需求。

1、用户在访问系统时,需要进行验证,该资源是否是受保护的资源,如果不是,可以继续访问,(比如开放的接口,登录页面,退出页面,都不是受保护的。)

2、如果访问的请求是受保护的,再进行验证,当前用户是否已经登录,如果没有登录,进行拦截,跳转登录页面,如果已经登录,进行权限验证,如果有权限访问当前页面,则继续访问,如果没有权限,跳转权限限制页面。

3、在登录页面,进行登录,这个应该是比较简单的。就是登录的一套东西了,验证用户名密码是否正确等。

……

需求什么的,都没什么特别麻烦的。

在写这个的项目的时候,学到了很多东西。

1、web.xml拦截器中,过滤和拦截,以前接触的比较少。下面贴代码。这个过滤和拦截,在Filter中定义,应该都知道。

<filter><!-- com.tujia.core.filter.SecurityFilter -->
		<filter-name>securityFilter</filter-name>
		<filter-class>com.tujia.core.filter.SecurityFilter</filter-class>
		<init-param>
			<param-name>ignores</param-name><!-- /tbk,这里配置的,是忽略拦截的。 -->
			<param-value>/app/appNavs,/app/download,/tulogin,/tulogout,/static,/img/select</param-value>
		</init-param>
		<!-- <init-param> 这个忽略的是,拦截的部分,
			<param-name>checks</param-name>/tbk,
			<param-value>/,/app/,/video/</param-value>
		</init-param> -->
	</filter>
	
	 <filter-mapping>
		<filter-name>securityFilter</filter-name>
		<url-pattern>*</url-pattern>
	</filter-mapping>

2、下面贴Filter的代码。

package com.tujia.core.filter;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

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 org.springframework.web.context.WebApplicationContext;

import com.tujia.common.exception.UnAuthedException;
import com.tujia.core.security.SecurityUtil;

public class SecurityFilter implements Filter {

	private Set<String> prefixIignores = new HashSet<String>();
	private Set<String> prefixChecks = new HashSet<String>();
	
	private SecurityUtil securityUtil;
	
	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;

		if (canIgnore(request)) {
			chain.doFilter(req, res);
			return;
		}
		
		/*if (!needCheck(request)) {
			chain.doFilter(req, res);
			return;
		}*/
		
		try {
			//
			boolean validUser = securityUtil.authenticate(request, response);// 进行登录认证...
			
			if (!validUser) {//判断是否登录。否,跳转登录页面,
				String cp = request.getContextPath();
				response.sendRedirect(cp+"/tulogin");
				return;
			}

			chain.doFilter(req, res);//已经登录
		} catch (UnAuthedException e) {
			e.printStackTrace();
		} finally {
			SecurityUtil.clearOnThreadOver();
		}

	}

	public void init(FilterConfig config) throws ServletException {

		ServletContext servletContext = config.getServletContext();
		WebApplicationContext ap = (WebApplicationContext) servletContext
				.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
		securityUtil = (SecurityUtil) ap.getBean("securityUtil");
		
		String cp = config.getServletContext().getContextPath();
		String ignoresParam = config.getInitParameter("ignores");
		//String checksParam = config.getInitParameter("checks");
		String[] ignoreArray = ignoresParam.split(",");
		//String[] checksArray = checksParam.split(",");
		for (String s : ignoreArray) {
			prefixIignores.add(cp + s);
		}
		
		/*for (String s : checksArray) {
			prefixChecks.add(cp + s);
		}*/
	}

	@Override
	public void destroy() {
		prefixIignores = null;
	}

	private boolean canIgnore(HttpServletRequest request) {
		String url = request.getRequestURI();
		for (String ignore : prefixIignores) {
			if (url.startsWith(ignore)) {
				return true;
			}
		}
		return false;
	}
	
	private boolean needCheck(HttpServletRequest request) {
		String url = request.getRequestURI();
		for (String ignore : prefixChecks) {
			if (url.startsWith(ignore)) {
				return true;
			}
		}
		return false;
	}
}


分享到:
评论

相关推荐

    SSO单点登录客户端

    SSO单点登录客户端程序;适用于sso自定义单点登录。可扩展;非网络已有项目。

    sso单点登录服务端程序

    SSO单点登录服务端程序;适用于sso自定义单点登录。可扩展;非网络已有项目。

    单点登录sso-shiro-cas-maven

    1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的是MySQL5.0,数据库名为db_test 3. spring-node-1: 应用1 4. spring-node-2: 应用2 其中node1...

    SharePoint2010单点登录[参照].pdf

    SharePoint 2010 单点登录实现详解 SharePoint 2010 中,单点登录的实现方式不同于...SharePoint 2010 中的单点登录实现需要通过 SSS 对凭据信息进行管理和加密,然后通过开发自定义的 WebPart 来实现单点登录的功能。

    采购订单抬头和行项目屏幕增强&BAPI传入自定义字段.pdf

    采购订单抬头和行项目屏幕增强 & BAPI 传入自定义字段 本文档主要介绍了使用 User-Exit 的方式实现采购订单的屏幕增强,涉及的用户出口是 MM06E005,本次案例的需求就是在 ME21N、ME22N 和 ME23N 的抬头和项目上...

    单点登录源码

    单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ├── zheng-config -- 配置中心[端口:1001] ├── zheng-upms -- 用户权限管理系统 | ├── ...

    单点客户关系管理系统-系统说明书(第二版)

    单点客户关系管理系统-系统说明书(第二版) 单点客户关系管理系统是acomprehensive 客户关系管理系统,旨在帮助企业更好地管理客户关系,提高客户满意度和忠诚度。本系统具有强大的功能和高效的性能,可以满足企业...

    oauth2:spring boot security oauth2 jwt整合,搭建一个SSO单点登录系统,认证服务和资源服务分离.....

    spring boot security oauth2 jwt整合,搭建一个SSO单点登录系统,认证服务和资源服务分离...... authentication 认证服务: 对身份的认证和授权 除oauth2默认的4中登录模式外,添加支持自定义模式登录 目前项目支持的...

    自定义查询框架Criteria

    最近一个项目 需要 条件动态配置,客户简单了 但是涉及到开发就麻烦了 首先数据量很大 几百个G 单表就有千万数据 其次 关联表很多 科研查询可以包括一百多条查询条件可自动配置。 但是mybatis肯定处理不了那么复杂...

    金蝶K3wise14.3--PT113321(去验证)-修正基础数据自定义字段无法输入的bug.rar

    功能点:物料核算项目新增自定义字段报错 应用场景:基础资料下物料或客户资料中增加自定义字段保存时提示“名称不能为特殊字符” 症状或实现方案:在物料中增加自定义字段,名称为一部车间,保存时提示“名称不能为...

    framer-path, 在 Framer JS中,创建自定义svg形状并分别设置每个点的动画.zip

    framer-path, 在 Framer JS中,创建自定义svg形状并分别设置每个点的动画 创建自定义svg形状并在 Framer JS中单独设置每个点动画。可以用于以下用途:使用快速数学表达式创建点数组动画图形&统计简单动画图标流体...

    我整理的VBA 自定义函数大全 共138页

    3.返回当个人工资薪金所得为2000元(起征点为850元)时的应纳个人所得税税额 4.从形如"123545ABCDE"的字符串中取出数字 5.从形如"ABCD12455EDF"的字符串中取出数字 6.按SplitType取得RangeName串值中的起始位置 7.将...

    基于SSH框架的BBS论坛JavaEE项目源码

    4、提供用户接口、其他系统用户接口调用设置以及接口管理(可与jeecms系列软件无缝对接实现单点登录) 5、用户自定义字段 6、禁用ip、id发帖、回帖 7、注册成功自动登录 8、设置在线活跃度等级 9、手机模板方案...

    sso:cas单点登录系统,其中包括cas认证服务,配置中心,监控平台,服务管理的高可用项目

    打造一个单点登录平台,其中包括以下一部分 CAS服务器 配置中心 服务管理系统 监控平台 客户端集成(cas client,pac4j,shiro) 并且在博客中记录整个建造过程以及注意事项,目前教程如下: 特性 Docker快速启动 ...

    Java项目:(小程序)前台+后台相结合在线点餐系统(spring+spring mvc+mybatis+layui+微信小程)

    微信小程序扫码点单 2 .微信小程序外卖点单 3 .后台可对微信小程序主页进行自定义(如颜色、布局、 图片等) 4 .支持微信支付与余额支付 5 .后台含有订单管理、门店管理等对小程序的管理功能 二、项目运行 环境...

    Redmine 管理员手册

    目录 • 1 说明 • 2 项目管理 • 3 用户管理 • 4 用户组管理 • 5 角色和权限 • 6 问题跟踪系统 • 7 自定义属性 ...o 10.6 配置单点登录 o 10.7 从LDAP同步账号 o 10.8 Subversion 基于路径授权

    JavaEE求职简历-姓名-JAVA开发工程师.doc

    项目名称:澳欧惠品 项目描述: 该项目是为重庆澳欧惠品开发的一款线上销售和线下店铺管理的B/C商城系统,客户通过前台浏览和购买商品,管理员通过后台对平台、...7.项目数据安全框架:CAS单点登录、hibernate-valida

    excel中161个VBA_自定义函数超级实用

    函数作用:返回当个人工资薪金所得为2000元(起征点为850元)时的应纳个人所得税税额.............................10 '4.函数作用:从形如"123545ABCDE"的字符串中取出数字....11 '5.函数作用:从形如"ABCD12455EDF...

Global site tag (gtag.js) - Google Analytics