粗颗粒度权限控制(使用过滤器完成)

分析:

精确到Session的权限控制(判断Session是否存在)

使用过滤器完成粗颗粒的权限控制,如果Session不存在就跳转到首页,如果存在可以通过URL链接访问到对应的操作。

第一步:定义一个过滤器:

 1 public class SystemFilter implements Filter {
 2
 3     /**web容器启动的时候,执行的方法*/
 4     //存放没有Session之前,需要放行的连接
 5     List<String> list = new ArrayList<String>();
 6     public void init(FilterConfig config) throws ServletException {
 7         list.add("/index.jsp");
 8         list.add("/image.jsp");
 9         list.add("/system/elecMenuAction_menuHome.do");
10     }
11
12     /**每次访问URL连接的时候,先执行过滤器的doFilter的方法*/
13     public void doFilter(ServletRequest req, ServletResponse res,
14             FilterChain chain) throws IOException, ServletException {
15         HttpServletRequest request = (HttpServletRequest) req;
16         HttpServletResponse response = (HttpServletResponse) res;
17         //获取访问的连接地址
18         String path = request.getServletPath();
19         //在访问首页index.jsp页面之前,先从Cookie中获取name,password的值,并显示在页面上(完成记住我)
20         this.forwordIndexPage(path,request);
21         //如果访问的路径path包含在放行的List的存放的连接的时候,此时需要放行
22         if(list.contains(path)){
23             chain.doFilter(request, response);
24             return;
25         }
26         //获取用户登录的Session
27         ElecUser elecUser = (ElecUser)request.getSession().getAttribute("globle_user");
28         //放行
29         if(elecUser!=null){
30             chain.doFilter(request, response);
31             return;
32         }
33         //重定向到登录页面
34         response.sendRedirect(request.getContextPath()+"/index.jsp");
35     }
36
37     /**销毁*/
38     public void destroy() {
39
40     }
41 }

第二步:在web容器中添加对应的过滤器:

 1 <!-- 自定义过滤器,要求添加到struts2过滤器的前面 -->
 2     <filter>
 3         <filter-name>SystemFilter</filter-name>
 4         <filter-class>cn.itcast.elec.util.SystemFilter</filter-class>
 5     </filter>
 6     <filter-mapping>
 7         <filter-name>SystemFilter</filter-name>
 8         <url-pattern>*.do</url-pattern>
 9         <url-pattern>*.jsp</url-pattern>
10     </filter-mapping>

总结:

  • 在过滤器中定义放行的连接,因为不是每个操作都会存在Session
  • 在过滤器中获取登录后存放的Session,如果Session不为空,则放行,即可以操作定义的业务功能,如果Session为空,则跳转到登录页面。
  • 控制访问的系统必须要存在Session

注意:

  Session不应该在服务器一直不清空,如果Session过多,会导致Session压力大,系统变慢,于是要求10分钟如果不操作系统,将Session自动清空。在web.xml中配置

1 <session-config>
2     <session-timeout>10</session-timeout>
3 </session-config>
时间: 2024-10-29 19:09:16

粗颗粒度权限控制(使用过滤器完成)的相关文章

spring的权限控制,过滤器

spring的过滤器可以实现登录状态问题 1.创建一个AccessFilter类,基础代码 package com.ujia.util.access; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframe

权限控制(粗颗粒+细颗粒)

1 粗颗粒度权限控制(使用过滤器完成) 分析: 精确到Session的权限控制(判断Session是否存在) 使用过滤器完成粗颗粒的权限控制,如果Session不存在就跳转到首页,如果存在可以通过URL链接访问到对应的操作. 第一步:定义一个过滤器: public class SystemFilter implements Filter { /**web容器启动的时候,执行的方法*/ //存放没有Session之前,需要放行的连接 List<String> list = new ArrayLi

web day21 web过滤器Filter,应用案例统计IP,解决全站乱码,粗粒度权限控制,页面静态化

JavaWeb三大组件 1. 都需要在web.xml中进行配置 Servlet Listener(2个感知监听器不需要配置) Filter 过滤器 它会在一组资源(jsp.servlet..css..html等等)的前面执行! 它可以让请求得到目标资源,也可以不让请求达到! * 过滤器有拦截请求的能力! 登录: 允许它访问AServlet.BServlet.CServlet ------------------------------- 过滤器如何编写 1. 写一个类实现Filter接口 2.

权限(二)--权限的控制(过滤器与自定义标签)

一. 接着上一篇的说 权限(一)--用户.权限组以及权限的分配 权限的控制分为两块: 1.页面的控制(没用权限的不让他看到页面) 2.过滤控制(就算知道url,没有权限也不让进) 在项目中,都是由一个人来负责权限部分的编写,然后其他人的活中多少会涉及到一些权限相关的. 所以,权限控制的通用性是非常重要的(总不能每次写到就找写权限部分的那个人,问他怎么弄). 测试demo包: 权限控制Demo 二.过滤器 在访问url之前,进行一次过滤,同时查看当前用户是否有访问该url的权限. 为了保证通用性,

Servlet过滤器---登录权限控制

实现了登录时权限控制:进入首页.登录页以及登录servlet时,不用验证权限:进入其它页面时,须验证是否登录,未登录则跳转到登录页. 一个简单的首页:index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML

学习笔记_过滤器应用(粗粒度权限控制(拦截是否登录、拦截用户名admin权限))

RBAC ->基于角色的权限控制 l  tb_user l  tb_role l  tb_userrole l  tb_menu(增.删.改.查) l  tb_rolemenu 1 说明 我们给出三个页面:index.jsp.user.jsp.admin.jsp. l  index.jsp:谁都可以访问,没有限制: l  user.jsp:只有登录用户才能访问: l  admin.jsp:只有管理员才能访问. 2 分析 设计User类:username.password.grade,其中grad

权限控制

权限概述 系统中有很多功能,这些功能并不是每一个登录的用户都能操作的,需要对用户操作系统的能力进行限制,该过程就叫权限 认证:系统提供的标识用户身份的功能(通常实现比如:登录)(告诉系统你是谁?) 授权:系统提供的根据用户的身份赋予其不同的操作系统能力功能(告诉系统你能做什么?) 系统启动 ---->web.xml|--->spring容器--->扫描Action Service Dao |--->OAListener---->通过spring容器中的service加载权限数

转Struts 权限控制

权限最核心的是业务逻辑,具体用什么技术来实现就简单得多. 通常:用户与角色建立多对多关系,角色与业务模块构成多对多关系,权限管理在后者关系中. 对权限的拦截,如果系统请求量大,可以用Struts2拦截器来做,请求量小可以放在filter中.但一般单级拦截还不够,要做到更细粒度的权限控制,还需要多级拦截. 不大理解filter(过滤器)和interceptor(拦截器)的区别,遂google之. 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 . 2.过滤器依赖与servlet容器,

总结权限控制方式 ----------(2)

1. URL拦截方式:在spring配置文件中配置过滤器链:配置项目请求对应拦截规则   2. 注解方式: a)开启注解扫描   b)service方法使用注解 验证当前用户是否有权限,当没有权限时候,shiro框架抛出异常: 解决:在Realm中给用户进行授权下:给当前用户增加权限即可 3. 页面标签实现权限控制 a) 导入标签库 <%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro" %&g