Filer过滤器之权限过滤||||备忘

Directshow中Filter开发基础 摘要:关于开发自己的Filter,我以前写过一篇文章,《利用Directshow开发自己的filter》,里面详细介绍了开发filter一些步骤,这里我想介绍一些filter的基础知识,可以让你更好的理解filter。本篇文档主要包括下面一些内容1filter的连接2filter间的数据流动3pin连接时数据格式的动态改变4Threads and Critical Sections5质量控制管理6 阅读详情

最近要搞安全漏洞检查.写好备忘

过滤 json和html后缀的url 

package com.wh.tms.service.impl;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
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.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSONObject;
import com.wh.tms.constans.SystemCons;
import com.wh.tms.dao.sys.IMenuDAO;
import com.wh.tms.dao.sys.IRoleDAO;
import com.wh.tms.dao.sys.IRoleMenuDAO;
import com.wh.tms.dao.sys.IUserRoleDAO;
import com.wh.tms.entity.po.Menu;
import com.wh.tms.entity.po.Role;
import com.wh.tms.entity.po.RoleMenu;
import com.wh.tms.entity.po.User;
import com.wh.tms.entity.po.UserRole;

import tk.mybatis.mapper.entity.Example;

//@Component
public class RoleFilter implements Filter {

	ApplicationContext context = new ClassPathXmlApplicationContext("/spring/spring-dao.xml");
	IRoleDAO roleDao = context.getBean(IRoleDAO.class);
	IRoleMenuDAO roleMenuDao = context.getBean(IRoleMenuDAO.class);
	IMenuDAO menuDao = context.getBean(IMenuDAO.class);
	IUserRoleDAO userRoleDao = context.getBean(IUserRoleDAO.class);
	Map<Integer, Set<String>> map = new HashMap<>();

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		List<Role> allRole = roleDao.selectAll();
		for (Role role : allRole) {
			Example example = new Example(RoleMenu.class);
			example.createCriteria().andEqualTo("roleId", role.getId());
			List<RoleMenu> roleMenus = roleMenuDao.selectByExample(example);

			Set<Integer> menuIds = new HashSet<Integer>();
			for (RoleMenu roleMenu : roleMenus) {
				menuIds.add(roleMenu.getMenuId());
			}
			// 获取菜单信息
			example = new Example(Menu.class);
			example.createCriteria().andIn("id", menuIds).andIsNotNull("permissionUrls");
			example.setOrderByClause("id asc");
			List<Menu> menus = menuDao.selectByExample(example);
			Set<String> menuUrl = new HashSet<String>();

			for (Menu menu : menus) {
				String[] split = menu.getPermissionUrls().split(",");
				for (String url : split) {
					menuUrl.add(url);
				}

			}

			map.put(role.getId(), menuUrl);

		}
	}

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) arg0;
		HttpServletResponse response = (HttpServletResponse) arg1;
		HttpSession session = request.getSession();
		String requestURI = request.getRequestURI();
		System.out.println("requestURI+++:" + requestURI);

		if (requestURI.indexOf("/login.html") > -1) {// 登录页面不过滤
			chain.doFilter(arg0, arg1);// 递交给下一个过滤器
		} else if (requestURI.indexOf("/login.json") > -1) {// 登录页面不过滤
			chain.doFilter(arg0, arg1);// 递交给下一个过滤器
		} else if (requestURI.indexOf("/index.html") > -1 || requestURI.indexOf("/welcome.html") > -1 || requestURI.indexOf("/menulist.json") > -1){
			chain.doFilter(arg0, arg1);
		}   else if (null != request) {
		
			Object object = request.getSession().getAttribute(SystemCons.session_key);
			if (null != object) {
				response.setCharacterEncoding("UTF-8");
				response.setContentType("application/json; charset=utf-8");
				PrintWriter out = null;
				User user = (User) object;
				System.out.println("user_______:" + user);
				Example example = new Example(UserRole.class);
				example.createCriteria().andEqualTo("uid", user.getId());
				List<UserRole> userRoleList = userRoleDao.selectByExample(example);
				if (userRoleList != null) {
					UserRole userRole = userRoleList.get(0);
					Set<String> set = map.get(userRole.getRoleId());
					String uri = requestURI.substring(5, requestURI.length());
					boolean contains = set.contains(uri);
					if (!contains) {
						System.out.println("该用户没有权限");

						try {
							JSONObject res = new JSONObject();
							res.put("code", "-1");
							res.put("msg", "您没有权限");
							out = response.getWriter();
							out.append(res.toString());
						} catch (Exception e) {
							e.printStackTrace();
						} finally {
							if (out != null) {
								out.close();
							}
						}
					} else {
						chain.doFilter(arg0, arg1);
					}
				} else {
					try {
						JSONObject res = new JSONObject();
						res.put("code", "-1");
						res.put("msg", "您没有权限");
						out = response.getWriter();
						out.append(res.toString());
					} catch (Exception e) {
						e.printStackTrace();
					} finally {
						if (out != null) {
							out.close();
						}
					}
				}

			} else {
				response.sendRedirect("login.html");
				//request.getRequestDispatcher("login.html").forward(request, response);
				//chain.doFilter(arg0, arg1);
			}
		}

//		chain.doFilter(arg0, arg1);
	}

	@Override
	public void destroy() {

	}

}

这里要注意的是 重定向和 过滤器链会有冲突 只能取一个,最下面注掉的就是冲突的地方

init初始化获取全部角色所拥有的权限url,这里之前用autowired注入,注入不进来,换成bean注入解决

然后是web.xml

<filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>xxx.xxx.xxx.RoleFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>*.json</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>*.html</url-pattern>
	</filter-mapping>

 

 

【Python计量】linearmodels面板数据回归(一) 我们以伍德里奇《计量经济学导论现代方法》的”第14章高级面板数据方法“的案例14.1为例,使用jtrain中的数据来进行固定效应估计。 阅读详情

相关推荐

数据中心机房建设标准及依据

深刻理解、尊重并恪守这些依据,是我们以科学、经济、可靠的方式,为蓬勃发展的数字经济筑牢基石的唯一路径。让我们共同努力,以标准为依据,以匠心为精神,建造更多世界一流的高效能、高可用、高智能的绿色数据中心,共同赋能数字中国的宏伟事业,支撑中华民族在数字时代的伟大复兴征程中稳步前行!今天我将力图以宏大的视角和深入的剖析,系统性地阐述数据中心机房建设所应遵循的多层次、多维度的标准依据,揭示这些依据背后的深层逻辑与时代使命,并探讨其如何共同作用于一座世界级数据中心的诞生。,以支持万兆乃至更高速率的传输。

qq_39980997的博客 1139

路由策略(Route-Policy)

路由策略(Routing Policy)是通过使用不同的匹配条件和匹配模式来进行路由信息的接收或发布过滤,或改变路由属性,通过改变路由属性(包括可达性)来改变网络流量所经过的路径。路由策略主要应用在路由信息发布、接收、引入和路由属性修改等几个方面。

Fanmeang的博客 1669

双击文件夹弹窗“找不到应用程序”,但是右键点击打开可以

此电脑、回收站、c、d、f盘、控制面板、任意文件夹等都没有办法双击打开。 右键中包含“使用filemanager打开”,是由于FileManager卸载残留导致的。 懒人专用附件 下载解压上面附件,双击导入可以清理FileManager软件残留 参考: 双击此电脑出现找不到应用程序,但是右键点击可以-其他-优快云问答https://ask.youkuaiyun.com/questions/7631439 电脑上的文件夹双击都提示找不到应用程序,但是右击打开就能打开,该怎么解决? - 知乎 (z

webmasterqpwou的博客 1万+

使用layui+ajax实现简单的菜单权限管理及排序

**简单的例子使用的layui框架,并没有使用他的ztree插件,只用ajax配合sql完成最简单的一二级菜单权限控制及其排序功能。 先看数据库设计:** user表: role表: ; menu表: user_role表: role_menu表: 在这里 menu的id依然是主键,多了mid也就是菜单id,pare_menu_id也就是这个菜单对应的父级菜单的菜单id(

Inverse_fang的博客 2万+

Windows: 深入剖析pip install SSLError与SSL模块缺失的根源及系统级修复

本文深入分析Windows系统下pip install SSLError与SSL模块缺失的根本原因,提供系统级修复方案。从Python安装包缺失SSL支持、OpenSSL库冲突到环境变量配置问题,详细讲解四大成因及对应的解决方案,包括重新安装Python、手动修复OpenSSL依赖等实用技巧,帮助开发者彻底解决HTTPS连接问题。

weixin_28595749的博客 459

深入分析大众点评 Ajax 接口:直接请求 JSON 数据高效获取评论

大众点评网站采用前后端分离架构,通过Ajax接口动态加载数据。按F12打开开发者工具,切换到Network(网络)面板。实际环境中,我们需要使用Python重现这一加密逻辑。查看请求响应,寻找包含评论数据的JSON接口。参数是大众点评的反爬机制核心,需要特别处理。:尊重网站的robots.txt文件规定。:仅将数据用于合法合规的研究和分析目的。:不侵犯大众点评的商业秘密和知识产权。打开大众点评网站,进入任意商户页面。:对采集到的用户信息进行脱敏处理。:避免对目标网站造成过大负担。

Z_suger7的博客 1585

过滤器(Filter)和拦截器(Interceptor)的区别

本文介绍主要介绍了Java Web Filter 与 Struts2 Interceptor 及其之间的联系与区别。

Rico's Blogs 5407

Stanford CS230深度学习(一)

斯坦福CS230可以作为深度学习的入门课,最近我也在跟着看视频、完成编程作业。首先列出使用的资源链接,然后给出第一课的理解和编程作业的代码。 所有资料如下: 一、课程连接: b站课堂讲授版:Stanford CS230(吴恩达 深度学习 Deep Learning | Autumn 2018)(中英双字幕) (一共10个视频,每周一个,但是每个视频对应下面的配套视频较多) Coursera配套视...

weixin_44750583的博客 2381

TKmybatis的框架介绍及使用方法

最近项目使用了SpringBoot+TKMytis框架,期间遇到一些问题,顺便记一下。 一、框架配置 配置的话非常简单,我用的是SpringBoot,直接引入: &lt;dependency&gt; &lt;groupId&gt;tk.mybatis&lt;/groupId&gt; &lt;artifactId&gt;mapper-spring-boot-starter&l...

宁曦的博客 12万+

Winform利用动画控制实现各种特效

动画绘制控制类代码 using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Threading; using System.Windows.Forms; namespace Mengliao.CSharp.A14 { #region 动画类型枚举 // 本例为了简单起见没有使用见名知意的名称,如用于实际可将这些枚举成员更名

LilyCoder的博客 2502

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

蚂蚁小兵 2466

LayUI就是个垃圾项目

想让自己的一套的组件被广大开发者采用,是一件很谨慎的事情,你要确保你所有的组件都能正常使用,满足大多数开发者的需求。如果出现了某一个组件功能不足,不得不引入另一套组件,这个就非常尴尬了,关键是对于开发者非常不友好。LayUI,国人高手开发的这么个组件库,就是这样个东西。。。。我们这个项目引入这个组件库,还得从另外一个项目说起。当时的开发人员自己随便引入组件库,引入了这个据说中文文档最全的组件库,当

tonyyl的专栏 2万+

c++ pcl点云处理(2025 长期更新)

目录1.常用的点云文件2.认识点云的文件格式3.点云的数据结构4.输入输出(IO)5.KD树6.Oc树(八叉树)7.点云可视化8.点云滤波9.点云拟合分割10.点云与图像11.特征点与特征描述及提取12.点云配准13.点云曲面重建

twnkie的博客 2259

layui table设置前台过滤转义等

{field: 'username', title: '用户名', width:80,style:'height:100px;',templet: '#titleTpl'} 然后再最后加上   {{#  if(d.username=='user-0'){ }}     转义用户0 {{#  } else if(d.username=='user-1') { }}     转义用户1

ardo_pass的博客 8602

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

10路由策略-前缀列表

10路由控制-前缀列表 标签(空格分隔):HCIP 文章目录10路由控制-前缀列表路由策略IP-Prefix List小技巧--不接设备产生静态路由前言 01路由过滤实施 02修改路由属性 03路由实施 04路由控制 05对流量行为的控制需求分析 06控制网络流量可达性 07调整网络流量路径-单协议简单场景 路由策略 定义: 通过一系列工具或方法对路由进行各种控制的"策略" 影响路由的产生,发布,选择等,进而影响报文的转发路径 目的: 作用 结果 对路由进行过滤 要不要这条路

YwlPy的博客 4658

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

mybatis中关于example类详解

这几天刚接触example,很多内容都是破碎的,写一篇博文加深理解。 一、什么是example类 mybatis-generator会为每个字段产生如上的Criterion,如果表的字段比较多,产生的Example类会十分庞大。理论上通过example类可以构造你想到的任何筛选条件。在mybatis-generator中加以配置,配置数据表的生成操作就可以自动生成example了。具...

luluyo的博客 7万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SpringBoot+Shiro学习(七):Filter过滤器管理

先从我们写的一个自定义Filter来看: public class RoleOrFilter extends AuthorizationFilter { @Override protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) t...

weixin_34258782的博客 1363

Filter 验证当前访问用户是否登录

当用户访问网站页面时,系统会检测用户是否是合法登录用户,没登录的用户会被转跳到登录页面或者返回登录提示信息,反之用户可以正常访问 具体思路如下:     利用filter 过滤所有用户的请求,用户的请求url为登录或注册页面则视为正常访问,当用户登录时为当前用户创建session,将用户名保存在session里面,当用户访问路径为网站页面时检查当前用户session 是否存在,如果sessio

千里之行,始于足下 4986

Shiro过滤器过滤属性

securityManager:这个属性是必须的。 loginUrl :没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,不输入地址的话会自动寻找项目web项目的根目录下的”/login.jsp”页面。 successUrl :登录成功默认跳转页面,不配置则跳转至”/”。如果登陆前点击的一个需要登录的页面,则在登录自动跳转到那个需要登录的页面。不跳转到此。 u

sayoko06的博客 817

过滤器、过滤器配置

java 代码一、使浏览器不缓存页面的过滤器     import javax.servlet.*;    import javax.servlet.http.HttpServletResponse;    import java.io.IOException;       /**   * 用于的使 Browser 不缓存页面的过滤器   */   public class ForceNoCach

4284

layui table设置前台过滤转义

weixin_39276619的博客 2894

HuaWei ❀ 策略路由概述

策略路由概述 路由策略使用不同的匹配条件和匹配模式选择路由和改变路由属性,在特定的场景中,路由策略的六种过滤器也能单独使用来实现路由过滤,若设备支持BGP to IGP功能,还能在IGP引入BGP路由时,使用BGP私有属性作为匹配条件; 1、路由策略原理 如上图所示,一个路由策略中包含N(N>=1)个节点Node,路由进入路由路由策略后,按节点序号从小到大依次检查各个节点是否匹配,匹配条件由If-match子句定义,涉及路由信息的属性和路由策略的六种过滤器; 当路由与该节点的所有If-match子句

无糖可乐没有灵魂 703

FRR BGP协议分析15 -- 路由策略

路由策略的实现分为两个步骤: 定义规则:定义将要实施路由策略的路由信息的特征,即定义一组匹配规则。可以用路由信息中的不同属性作为匹配依据进行设置,如目的地址、发布路由信息的路由器地址等。 应用规则:将匹配规则应用于路由的发布、接收和引入等过程的路由策略中。 过滤器 路由策略的核心内容是过滤器,通过使用过滤器,可以定义一组匹配规则。提供了以下几种过滤器供路由策略使用。 其中,ACL、地址...

~~ LINUX ~~ 1951

BGP过滤器原理和实验(华为设备)

概述: 过滤器,也就是匹配路由条目的工具 目前提供以下五种过滤器供BGP使用: • 访问控制列表ACL(Access Control List) • 地址前缀列表(IP-Prefix List) • AS路径过滤器(AS-Path-Filter) • 团体属性过滤器(Community-Filter) • 扩展团体属性过滤器(Extcommunity-Filter) 在路由控制笔记归纳ACL、前缀列表在BGP中的使用;这里主要归纳新增加的三种过滤器: • AS路径过滤器: • 团体属性过滤器: • 拓展团体

tushanpeipei的博客 4082
上一篇: layui常见问题知识汇总,经典前端UI框架
下一篇: xss漏洞完美解决方法
f0rd_
博客等级 码龄9年 23粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值