这是(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自定义单点登录。可扩展;非网络已有项目。
1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的是MySQL5.0,数据库名为db_test 3. spring-node-1: 应用1 4. spring-node-2: 应用2 其中node1...
单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ├── zheng-config -- 配置中心[端口:1001] ├── zheng-upms -- 用户权限管理系统 | ├── ...
spring boot security oauth2 jwt整合,搭建一个SSO单点登录系统,认证服务和资源服务分离...... authentication 认证服务: 对身份的认证和授权 除oauth2默认的4中登录模式外,添加支持自定义模式登录 目前项目支持的...
最近一个项目 需要 条件动态配置,客户简单了 但是涉及到开发就麻烦了 首先数据量很大 几百个G 单表就有千万数据 其次 关联表很多 科研查询可以包括一百多条查询条件可自动配置。 但是mybatis肯定处理不了那么复杂...
功能点:物料核算项目新增自定义字段报错 应用场景:基础资料下物料或客户资料中增加自定义字段保存时提示“名称不能为特殊字符” 症状或实现方案:在物料中增加自定义字段,名称为一部车间,保存时提示“名称不能为...
framer-path, 在 Framer JS中,创建自定义svg形状并分别设置每个点的动画 创建自定义svg形状并在 Framer JS中单独设置每个点动画。可以用于以下用途:使用快速数学表达式创建点数组动画图形&统计简单动画图标流体...
3.返回当个人工资薪金所得为2000元(起征点为850元)时的应纳个人所得税税额 4.从形如"123545ABCDE"的字符串中取出数字 5.从形如"ABCD12455EDF"的字符串中取出数字 6.按SplitType取得RangeName串值中的起始位置 7.将...
4、提供用户接口、其他系统用户接口调用设置以及接口管理(可与jeecms系列软件无缝对接实现单点登录) 5、用户自定义字段 6、禁用ip、id发帖、回帖 7、注册成功自动登录 8、设置在线活跃度等级 9、手机模板方案...
打造一个单点登录平台,其中包括以下一部分 CAS服务器 配置中心 服务管理系统 监控平台 客户端集成(cas client,pac4j,shiro) 并且在博客中记录整个建造过程以及注意事项,目前教程如下: 特性 Docker快速启动 ...
微信小程序扫码点单 2 .微信小程序外卖点单 3 .后台可对微信小程序主页进行自定义(如颜色、布局、 图片等) 4 .支持微信支付与余额支付 5 .后台含有订单管理、门店管理等对小程序的管理功能 二、项目运行 环境...
目录 • 1 说明 • 2 项目管理 • 3 用户管理 • 4 用户组管理 • 5 角色和权限 • 6 问题跟踪系统 • 7 自定义属性 ...o 10.6 配置单点登录 o 10.7 从LDAP同步账号 o 10.8 Subversion 基于路径授权
项目名称:澳欧惠品 项目描述: 该项目是为重庆澳欧惠品开发的一款线上销售和线下店铺管理的B/C商城系统,客户通过前台浏览和购买商品,管理员通过后台对平台、...7.项目数据安全框架:CAS单点登录、hibernate-valida
函数作用:返回当个人工资薪金所得为2000元(起征点为850元)时的应纳个人所得税税额.............................10 '4.函数作用:从形如"123545ABCDE"的字符串中取出数字....11 '5.函数作用:从形如"ABCD12455EDF...
另外本项目提供用户管理,用户权限管理,单点登录客户端信息管理,系统菜单管理,以及应用健康状态监控,接口调用时间监控,工程配置信息查看等高级功能。系统架构架构主要以Spring相关组件为基础建造的。系统前端...
项目ExDlgTS,通过改变选项卡所包含的颜色滑块实现单文档主窗口所包含图形的色彩变化,选项卡和滑块操作。 第10章 项目ExPen,画笔操作; 项目ExBrush,画刷操作; 项目ExFont,字体操作; 项目MyDraw,位图操作; ...