`
highfly-s
  • 浏览: 100348 次
  • 性别: 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中使用过滤器实现用户权限限制功能

    接下来,我们将按照以下步骤来创建一个简单的用户权限过滤器: 1. **创建过滤器类**: 在`src`目录下创建一个新的Java类,例如`UserAuthorizationFilter`,实现`Filter`接口。你需要重写`doFilter()`方法,在这个...

    jsp中的过滤器(含例子)

    本篇将深入讲解`JSP`中的过滤器,并通过实例来帮助理解其工作原理和应用场景。 首先,我们需要了解`Filter`的基本概念。过滤器是一个实现了`javax.servlet.Filter`接口的类,它可以拦截HTTP请求并进行预处理,或者...

    servlet+jsp实现过滤器 防止用户未登录访问

    使用servlet和jsp技术时,我们可以通过过滤器(Filter)来实现这样的安全防护机制。过滤器是一种服务器端的组件,它能够对请求和响应进行拦截,执行一些预处理或者后处理操作。它常用于进行登录验证、权限检查、字符...

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

    通过使用过滤器(Filter),可以在请求到达目标资源(如Servlet或JSP页面)之前进行处理,例如实现登录状态检查、权限验证等功能。下面我们就通过分析一个具体的示例代码来详细了解如何使用JSP Filter过滤器来判断...

    带过滤器的登录系统jsp+myeclipse+mysql

    标题中的“带过滤器的登录系统jsp+myeclipse+mysql”表明这是一个使用Java服务器页面(JSP)、MyEclipse集成开发环境以及MySQL数据库构建的登录系统,其中整合了过滤器(Filter)技术。这样的系统通常用于实现用户...

    jsp过滤器的使用(含一个project实例说明)

    本篇将深入探讨JSP过滤器的使用,并通过一个实际项目案例来展示其应用。 ### 1. JSP过滤器基础 JSP过滤器是基于Servlet规范的,遵循`javax.servlet.Filter`接口。它在用户请求到达目标资源之前被调用,可以在请求...

    jsp中过滤器配置实现所有过滤

    在Java服务器页面(JSP)开发中,过滤器(Filter)是Servlet规范的一部分,它允许开发者在请求被处理之前或之后执行某些操作,比如字符编码转换、权限验证、日志记录等。本话题将深入探讨如何在`web.xml`配置文件中...

    jsp过滤器(编码)

    **正文** 在Web开发中,`JSP (JavaServer Pages)` 是一种动态网页技术,它允许开发者将HTML、XML或者其他标记语言与Java代码混合在一起...理解并掌握如何使用过滤器处理编码问题,对于开发健壮的Web应用程序至关重要。

    java web权限访问过滤器

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

    权限管理(过滤器粗粒度无侵入拦截方式)

    在这个例子中,我们的权限过滤器会在这个链中。 3. **身份验证**:过滤器首先检查请求的上下文(例如,通过session获取用户信息)以确定用户是否已登录。如果用户未登录,可以重定向到登录页面,或者返回错误信息。 ...

    servlet过滤器技术实例,

    例如,以下配置会将名为`MyFilter`的过滤器应用到所有以`.jsp`结尾的URL上: ```xml &lt;filter-name&gt;MyFilter &lt;filter-class&gt;com.example.MyFilter&lt;/filter-class&gt; &lt;filter-name&gt;MyFilter *.jsp ``` 四、...

    利用过滤器设置权限利用过滤器设置权限

    本篇文章将详细介绍如何通过Web应用中的过滤器来实现对用户访问权限的控制。 #### 一、过滤器的概念与作用 **过滤器(Filter)** 是Servlet容器提供的一个接口,它可以在请求达到目标资源(如Servlet或JSP页面)...

    filter_权限过滤器

    在实际应用中,权限过滤器可以与其他过滤器配合使用,例如CSRF防护过滤器、GZIP压缩过滤器等,共同构建一个强大的安全防线。同时,为了适应不同的需求,权限过滤器的实现可能会有所不同,比如使用Spring Security...

    通过过滤器判断用户权限

    通过过滤器判断用户权限是实现应用安全访问控制的一种常见手段,尤其在Web应用程序中非常普遍。下面我们将基于提供的文件信息,深入探讨如何通过过滤器来判断用户的权限。 ### 一、UserPermissionFilter类详解 ###...

    老师给的jsp过滤器

    **五、过滤器应用场景** 1. **权限控制**:检查用户是否已登录,未登录则重定向到登录页面。 2. **字符编码转换**:统一处理请求和响应的编码格式,避免乱码问题。 3. **性能监控**:记录请求耗时,分析系统性能瓶颈...

    jsp中过滤器选择过滤器的写法详解.docx

    过滤器在请求到达目标资源(如JSP页面或Servlet)之前和之后执行,可以用来进行权限验证、数据转换、日志记录等多种操作。下面将详细介绍如何在JSP中编写和使用过滤器。 首先,我们需要创建一个实现了`javax....

    Servlet过滤器的简单使用源码+文档

    在标题"Servlet过滤器的简单使用源码+文档"中,我们可以理解为这个压缩包包含了一个关于Servlet过滤器的基础应用示例,以及相关的源代码和文档资料。描述中提到的"实现一个登陆界面",表明了过滤器可能被用作验证...

    jsp filter 过滤器功能与简单用法示例.docx

    ### JSP Filter 过滤器功能与简单用法示例 ...过滤器是Web开发中非常有用的工具,能够帮助开发者实现诸如权限控制、日志记录等功能,提高应用程序的安全性和可维护性。希望本文能为您的JSP程序设计带来帮助。

    servlet jsp 权限管理系统

    3. 指令过滤器(Filter):在Servlet容器中,可以使用Filter接口创建自定义过滤器,对HTTP请求进行拦截,根据用户身份和请求资源来决定是否放行。 4. 会话管理:利用HttpSession对象存储用户的登录状态和权限信息,...

Global site tag (gtag.js) - Google Analytics