`
highfly-s
  • 浏览: 96759 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jsp 权限过滤器的应用

阅读更多
1.在数据库中建立三个表 ,分别为 用户信息表,用户权限关联表,权限表

--建立用户表

create table t_user(id int identity primary key ,username varchar(30)  not null, password varchar(30) not null);
insert into t_user (username,password) values ('admin','123456');
insert into t_user (username,password) values ('guest','123456');
insert into t_user (username,password) values ('lily','123456');
--用户权限表
create table t_permission (id int identity primary key ,linkurl varchar(120),describe varchar(100));
insert into t_permission (linkurl,describe) values ('main.jsp','主页面');
insert into t_permission (linkurl,describe) values ('message.jsp','信息面');
insert into t_permission (linkurl,describe) values ('fuck.jsp','操蛋页面');
insert into t_permission (linkurl,describe) values ('love.jsp','爱情页面');

--用户和权限关联表
create table user_permission (uid int not null,pid int not null);
alter table user_permission add constraint up_uid_user_id foreign key (uid) references t_user(id) on delete cascade on update cascade;
alter table user_permission add constraint up_pid_permission_id foreign key (pid) references t_permission(id) on delete cascade on update cascade;


insert into user_permission (uid,pid) values (1,2);
insert into user_permission (uid,pid) values (1,3);

我们在这里模拟一个用户 ,并给予指定所操作的应用 以admin 用户为例 给指定了 可以访问message.jsp 和fuck.jsp




其他页面程序不再详细的说明,都包括在附加中


下面主要关键的是过滤器
public class FilterPermission extends HttpServlet implements Filter {

/**
*
*/
private static final long serialVersionUID = 1L;
// 字符编码(初始化参数)
    protected String encoding = null;
    // FilterConfig对象
    protected FilterConfig filterConfig = null;
    // 初始化方法
 
public void destroy() {
// TODO Auto-generated method stub
this.encoding = null;
        this.filterConfig = null;

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {   
HttpServletRequest servletRequest= (HttpServletRequest)request;
    HttpServletResponse servletResponse=(HttpServletResponse)response;
// TODO Auto-generated method stub
  // 判断字符编码是否有效
    if (encoding != null) {
    // 设置request字符编码
    servletRequest.setCharacterEncoding(encoding);
            // 设置response字符编码
    servletResponse.setContentType("text/html; charset="+encoding);
        }
    // 传递给下一过滤器

    try {

            chain.doFilter(request, response);

             } catch (ServletException sx) {

                 filterConfig.getServletContext().log(sx.getMessage());

             } catch (IOException iox) {

                 filterConfig.getServletContext().log(iox.getMessage());

             }

    //得到上下文访问路径
    String accessPath = servletRequest.getContextPath();
       //得到会话
    HttpSession session = servletRequest.getSession();
       //从会话中得到user对象
    User user=(User)session.getAttribute("formvalue");
//    SystemDao dao = new SystemDao();
//    String linkurl=dao.getPermission(user.getId());
    String
//得到请求的URI路径,并以截取
url=servletRequest.getRequestURI().substring(servletRequest.getRequestURI().lastIndexOf("/")+1, servletRequest.getRequestURI().length());
       //指定无需经过权限过滤的页面
      String exclude= "adminlogin,login.jsp,error.jsp,welcome.jsp";
    try {
    if(exclude.indexOf(url)==-1){
    if(user==null ){
   
    servletResponse.sendRedirect(accessPath+"/index.jsp");
   
    }else{
    SystemDao dao = new SystemDao();
               //如果user不为空 从对象中得到user 的ID 从数据中查询出所拥有的权限
        String linkurl=dao.getPermission(user.getId());
              //请求的操作,判断 权限中是否拥有 没有拥有转向于错误提示页面
        if(linkurl.indexOf(url)==-1){
                servletResponse.sendRedirect(accessPath+"/error.jsp");
           }}
    }
    } catch (Exception e) {
// TODO: handle exception
    e.printStackTrace();
}
   
   
      }





public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
// 对filterConfig赋值
    this.filterConfig = filterConfig;
    // 对初始化参数赋值
        this.encoding = filterConfig.getInitParameter("encode");

}

}



web.xml 过滤器的配置

<filter>
<filter-name>FilterPermission</filter-name>
<filter-class>com.smile.util.FilterPermission</filter-class>
<init-param>
<param-name>encode</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>


<filter-mapping>
<filter-name>FilterPermission</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>


 
0
1
分享到:
评论
2 楼 _大大大雄 2013-09-05  
关于这个应用, 有些东西想要请教下您行么?
1 楼 jptiancai 2013-07-10  
博主,看了博客,收获很多,这个例子运行的时候,会报下面的错误:
在网上找了许久,也没有解决,不知道博主遇到过这种情况吗?
java.lang.IllegalStateException: Cannot forward after response has been committed
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:349)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
at com.smile.util.FilterPermission.doFilter(FilterPermission.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

相关推荐

    jsp filter 过滤器判断用户是否登录

    jsp filter 过滤器判断用户是否登录的一个demo,可按照里面说明来完成

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

    NULL 博文链接:https://zywang.iteye.com/blog/407019

    servlet过滤器技术实例,

    servlet,filter,过滤器技术servlet,filter,过滤器技术

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

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

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

    一个简单的基于Java的考试系统,MySql数据库,有单选、多选、判断、问答、编程题型

    springboot+mybatis+druid+jsp+bootstrap实现后台权限管理系统源码.zip

    项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...

    基于JSP技术的权限认证系统的设计

    :对用户访问权限的控制是B/S模式系统开发和应用的一个重要环节.通过对RBAC模型以及Servlet过滤 器的分析研究,给出了用户权限判断和控制的方法,并采用4层架构技术设计和实现了一个权限管理系统,有效地 实现了...

    Layui+Jsp+SSM+MybatisPlus+MySql.rar

    权限过滤实现Filter后使用SysFilterConfig 类控制 使用Filter配合XsslHttpServletRequestWrapper/MyXssUtil类防止XSS漏洞 API文档管理使用swagger2.7.0 、fasterxml 2.8.0 框架已使用AOP切面及开启cglib代理实现日志...

    整合springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap实现权限管理文件上传下载多数据源切换等功能

    项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...

    网页教程《跟姐姐学JSP》

    7. 使用filter过滤请求 7.1. 批量设置请求编码 7.2. 用filter控制用户访问权限 7.3. filter所谓的特性 7.3.1. 请求映射 7.3.2. 过滤链 7.4. filter的详细配置 8. 配置listener监听器 8.1. 使用...

    JSP学习之Java Web中的安全控制实例详解

    ④ 使用过滤器对权限进行验证; ⑤ 能够对文件的局部内容进行验证; ⑥ 掌握安全验证码的基本实现方式; ⑦ 通过异常处理增强安全性。 二、主要内容: ① 通过修改前面的登录功能,分别对管理员和普通用户的登录进行...

    java后台权限管理系统源码(spring boot+mvc+mybatis).zip

    项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...

    (重温)JavaWeb–Filter 过滤器(JavaWeb 的三大组件之一)

     拦截请求常见的应用场景有: 1、权限检查 2、日记操作 3、事务管理 ……等等 2、Filter 的初体验 要求:在你的 web 工程下,有一个 admin 目录。这个 admin 目录下的所有资源(html 页面、jpg 图片、jsp 文件、...

    JspRun!社区论坛系统 v6.0 bulid 090424 GBK 安装版.rar

    2、优化减少过滤器中的sql查询语句 3、优化减少版块帖子列表sql查询语句 4、优化个人空间 5、优化验证问答 6、优化快速编辑帖子的提交方式和帖子附件下载次数 7、优化搜索的排序方式 8、升级优化序列化类 9...

    JspRun!社区论坛系统 v6.0 bulid 090423 GBK 源码版.rar

    2、优化减少过滤器中的sql查询语句 3、优化减少版块帖子列表sql查询语句 4、优化个人空间 5、优化验证问答 6、优化快速编辑帖子的提交方式和帖子附件下载次数 7、优化搜索的排序方式 8、升级优化序列化类 9...

    健身俱乐部Web网站-JSP+Servlet+Hibernate+jQuery+Ajax

    实现也非常简单,使用过滤器对指定页面处理即可,有点累了,不再折腾了) 8.页面风格统一的问题,比如登录页面、注册页面和主页面的风格可能不太统一 PS: 上面几点是我个人目前认为的不足之处,具体的就请各位自己...

    SpringMVC讲义大全.docx

    SpringMVC框架概述: 介绍什么是...拦截器和过滤器: 介绍如何使用拦截器和过滤器来实现日志记录、权限验证等功能。 RESTful Web服务: 讲解如何使用SpringMVC开发RESTful风格的Web服务,支持HTTP方法、资源定位等。

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 源码版.zip

    26、修改了:使用 Archiver 功能浏览没有阅读权限的主题时,没有显示提示信息的问题。 27、修改了:当编辑“活动主题”时,“插入图片”等按钮没有作用的问题。 28、修改了:开启干扰码功能后,用 IE 浏览器浏览...

    sh4springmvc3层架构html5+jsp多视图

    这个demo实现了简单地用户管理,权限管理,角色管理,底层使用ssh4的dao,service...利用过滤器实现session超时管理,权限管理需要自己补全。echache实现了二级缓存,打印sql可以看到部分配置后不会重复查询数据库。

Global site tag (gtag.js) - Google Analytics