`

Jsp中使用过滤器实现用户权限限制功能

    博客分类:
  • Java
阅读更多

今天下午,临下课的时候有个学生问了个关于过滤器的使用的问题,也不知道她从搞想到的,估计也是网上哪位达人的演示,她说原来那个功能有些局限,自己扩张了一下,但老是达不到效果。于是就来找我了。

她的需求如下:

1、目标:限制登录用户的访问页面,根据不同的权限可以查询相应的页面。

2、场景:已有三个用户admin、normal1、normal2,其中normal1只能访问page/jsp1下的页面,normal2只能访问page/jsp2下的页面;

 

根据她的描述,我打开她的代码一看,一个字“乱”,两个字“很乱”,完全看不到任何逻辑在里面,于是凭着经验大刀阔斧的给它来个修正,修正代码如下:

if (session.getAttribute("user") != null) {
	if(((UserInfo)session.getAttribute("user")).getName().equals("normal1") && !uri.startsWith("/page/jsp1")){
		request.getRequestDispatcher("/page/jsp1/normal1.jsp").forward(request, response);
	}
	if(((UserInfo)session.getAttribute("user")).getName().equals("normal2") && !uri.startsWith("/page/jsp2")){
		request.getRequestDispatcher("/MyJsp.jsp").forward(request, response);
	}
}else{
	if(!(uri.endsWith("result.jsp") || !uri.endsWith("index.jsp"))){
		request.getRequestDispatcher("/MyJsp.jsp").forward(request, response);
	}
}

其中:user变量是她定义session里的值,保存了登录进来的用户的信息;uri为获取到的客户端说请求的页面的地址。

经过这样修改之后基本的逻辑功能就有了,即除了管理员登录其他人都要各自进各自“家”。但是事情完全没有就这样结束,我以为就这样就完事了呢,谁知道人家一运行说不行,随便登录一个用户什么都能看到,一个也没有限制。靠,这可把我打击了一把,心想老子也干了好几年,难道还有问题,于是乎我钻到她的机器上去了。

接着就是按套路出牌,打断点,启动调试,运行......运行了几遍,果然和她说的一样,什么人都能进,另外就是死都不进断点(晚上回家后终于进断点了,汗...)。另外学生用的MyEclipse,调试起来老是进到另外一个web站点的filter的断点,郁闷的我没脾气了。(说来奇怪,这个班一共八组人,其它七组都在用eclipsed的JEE版的那个东东,就他们组在用MyEclipse,这都全拜他们组长领导有方啊,其实我也不是说用MyEclipse不好,但他们用的那个版本也太老土了,现在新版的Eclipse功能比他强多了,人家喜欢用,咱也不能强迫啊,都是为人民服务的,人民愿意,那咱还能咋的呢)

后来没脾气了,发到我自己机器上调了一下,偶然的机会看了下她的登录操作的处理,我傻眼了,她是这么写的:

String name = request.getParameter("name");
String password = request.getParameter("password");
if (name.equals("") || password.equals("")) {
	response.sendRedirect("/MyJsp.jsp");
} else {
	UserInfo user = new UserInfo();
	user.setName(name);
	user.setPassword(password);
	session.setAttribute("user", user);

	response.sendRedirect("page/admin.jsp");
}

我靠,大家看仔细了啊,这段代码的意思只要输入了用户名和密码,那么你就能登录进来,好这个还不明显的话,那么请您再结合上面的过滤器一起来看,这就是说,除了normal1和normal2,其他所有的人都当作管理员来处理了,终于找到症结了,心情豁然开朗,是在登录这个地方出了纰漏。一般我们做权限显示,所谓限制是限制指定的用户,对与不限制的那就是BOSS,所以在登录这个地方又加了判断,满足上面的三个用户的要求,防止出现一堆的BOSS,修改后如下:

String name = request.getParameter("name");
String password = request.getParameter("password");
if (name.equals("") || password.equals("")) {
	response.sendRedirect("/MyJsp.jsp");
} else {
	if (name.equals("normal1") || name.equals("normal2")
			|| name.equals("admin")) {
			
		UserInfo user = new UserInfo();
		user.setName(name);
		user.setPassword(password);
		session.setAttribute("user", user);

		response.sendRedirect("page/admin.jsp");
	} else {
		response.sendRedirect("MyJsp.jsp");
	}
}

 这样就相当于对登录用户做了限制,不是什么人都能登录的,是吧,让你登你才能登。 

另外还有一点需要注意的是,使用过滤器的时候默认的配置,在使用

request.getRequestDispatcher("/MyJsp.jsp").forward(request, response);

时是不会重新进入过滤器的,若此时也希望过滤器起作用则需要在这么配置web.xml文件

  <filter>
    <display-name>FilterStation</display-name>
    <filter-name>FilterStation</filter-name>
    <filter-class>com.FilterStation</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>FilterStation</filter-name>
    <url-pattern>/page/*</url-pattern>
    <dispatcher>ERROR</dispatcher>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>

 这样当发生类似forward和include这些内部转发都会被过滤。^_^

 

总结:通过上面过滤器的小例子,相信你也看出了,我们可以做一个基于角色的权限管理系统,不同角色的人可以使用不同的网站功能,这也算我没今天没白折腾这几小时吧,总得留下点什么吧。唉,做技术真难啊!

分享到:
评论
2 楼 chancelai 2010-11-05  
我也无语了
1 楼 xxwinnie 2009-09-25  
  很怀念当学生的年代~ 每天尽折腾些小玩意儿~ 现在想想还觉得挺好玩的呢~
不过我现在做的开发基本都不用这样的了~  权限这块都用组件,现在手头上的项目用的是证书~ 不过不是我弄~ 嘿嘿~

相关推荐

    java web权限访问过滤器

    本教程将详细讲解如何使用Java Web中的过滤器(Filter)来实现这样的访问控制。过滤器是Servlet API的一部分,它允许我们在请求到达目标资源(如Servlet、JSP页面)之前或之后对请求和响应进行拦截处理。 首先,...

    filter过滤器实现权限访问控制以及同一账号只能登录一台设备

    `Filter`过滤器是Java Servlet技术中的一种机制,用于对HTTP请求和响应进行预处理和后处理,从而实现诸如权限验证、数据转换、日志记录等功能。在这个场景中,我们将探讨如何使用`Filter`来实现权限访问控制,以及...

    Java Filter 限制用户浏览权限

    综上所述,Java Filter是实现用户浏览权限限制的关键工具。它允许我们在请求到达实际处理资源的Servlet之前进行干预,执行必要的身份验证和授权检查。通过对Filter的熟练运用,开发者可以构建出更加安全、可控的Web...

    java web 购物车,字符过滤器,权限过滤器,详细备注,适合初学者

    在Java Web开发中,购物车、字符过滤器和权限过滤器是重要的组成部分,它们共同构建了一个安全、功能完善的用户交互系统。以下是对这些概念的详细解释: 1. **购物车**: 购物车是电商网站的核心功能之一,它允许...

    拦截器和过滤器的区别

    - **独立性较高**:拦截器并不依赖于Servlet容器,因此可以在任何环境中使用拦截器技术来实现类似的功能。 - **适用范围广**:除了传统的Web应用外,拦截器还可以应用于各种基于Java的框架或库中。 - **过滤器**...

    struts实现的权限分配

    1. **用户认证**:在Struts中,可以使用过滤器(如Jaas登录过滤器)或自定义Action来处理用户的登录请求。认证过程包括获取用户名和密码,验证它们与数据库中的记录是否匹配。一旦验证成功,将用户信息保存在Session...

    一个简单的基于jsp的在线考试系统

    【标题】"一个简单的基于jsp的在线考试系统"所涉及的知识点主要集中在Java Web开发领域,特别是使用JSP(JavaServer Pages)技术构建一个在线考试平台。JSP是一种动态网页技术,它允许开发者将Java代码嵌入到HTML或...

    利用Filter限制用户浏览权限

    在Java Web开发中,过滤器(Filter)是实现动态网页应用程序功能的重要组件之一。它能够对HTTP请求和响应进行预处理和后处理,为实现特定的功能提供了强大的支持。本话题将详细探讨如何利用Filter来限制用户浏览特定...

    web.xml过滤器知识

    在Java Web开发中,`web.xml`过滤器是一个不可或缺的部分,它为开发者提供了强大的功能,帮助他们实现对Servlet和JSP页面的预处理和后处理。过滤器在服务器上先于目标Servlet或JSP页面执行,能够拦截、修改请求和...

    day17过滤器 禁止缓存中文乱码自动登录MD5加密url级别权限控制

    标题中的“day17过滤器 禁止缓存中文乱码自动登录MD5加密url级别权限控制”涉及了多个IT领域的知识点,我们将逐一详细解释。 1. **过滤器(Filter)**: 过滤器是Java Web开发中的一种机制,它允许我们在请求到达...

    JAVA_Servlet过滤器.

    3. 访问地址过滤:通过过滤器可以限制用户访问特定的URL,例如只有具备特定权限的用户才能访问管理页面。 4. 网站logo过滤:可以通过过滤器动态地为网站中的所有页面添加logo,而不必在每个页面上重复代码。 在扩展...

    jsp admin用户管理

    可以使用Filter进行权限过滤,限制未授权访问。 4. **个人信息管理**:允许用户查看和更新自己的信息,如修改密码、完善个人资料等。 **JSP与Servlet协同工作** 1. **JSP作为视图层**:负责展示数据,通常结合CSS和...

    过滤器/拦截器

    过滤器可以实现的功能包括: 1. **数据转换**:比如,将请求参数从一种格式转换为另一种格式。 2. **安全控制**:检查请求是否包含敏感信息,或者限制非法访问。 3. **字符编码**:统一设置请求和响应的编码格式,...

    过滤器在Java Web开发中的应用研究.zip

    总之,Java Web开发中的过滤器是一种强大的工具,它提供了灵活的扩展性和可复用性,能够帮助开发者实现多种功能,提升应用程序的安全性、性能和用户体验。在实际项目中,合理利用过滤器可以极大地提高代码的组织结构...

    Javaweb过滤器.zip

    一个请求可以经过多个过滤器,每个过滤器都可以有自己的处理逻辑,这使得过滤器可以灵活地组合使用,实现复杂的功能。 10. **Spring框架中的Filter**: Spring框架也提供了`FilterRegistrationBean`,方便在...

    采用jsp+servlet实现的BBS

    4. **权限控制**:通过Servlet检查用户权限,如管理员操作、普通用户权限限制等。 5. **搜索功能**:使用Servlet处理查询请求,模型层执行SQL查询,视图展示搜索结果。 四、JSP+Servlet实现步骤 1. **创建数据库...

    5个Servlet过滤器实例源码(JSP)

    Servlet过滤器大全,各种详细使用的代码! 一、字符编码的过滤器 二、使浏览器不缓存页面的过滤器 三、检测用户是否登陆的过滤器 四、资源保护过滤器 五 利用Filter限制用户浏览权限

    jsp下fckeditor配置.实现图片上传功能

    在Java Web开发中,FCKeditor是一款非常流行的富文本编辑器,它允许用户在网页上进行格式化的文本编辑,包括插入图片、链接等操作。在JSP环境下配置FCKeditor并实现图片上传功能,需要一系列步骤。下面我们将详细...

Global site tag (gtag.js) - Google Analytics