首页 > 编程知识 正文

javaweb拦截器是什么,java拦截器原理

时间:2023-05-03 22:38:27 阅读:17189 作者:4151

实现的功能:确定用户是否已登录,未登录的用户无法访问任何页面或操作,并自动跳转到登录页面。

过程:由于对过滤器和拦截器不熟悉,无论开始哪种方式,问题都不断。 然后通过调试,并粘贴到此处作为总结和笔记保留

过滤器过滤器的实现

配置:web.xml

光过滤器

com.* * *.rights.right过滤器

光过滤器

*.jsp

光过滤器

* .动作

代码:

mportjava.io.IOException;

导入javax.servlet.filter;

导入javax.servlet.filter chain;

导入javax.servlet.filter config;

导入javax.servlet.servlet exception;

导入javax.servlet.servlet request;

导入javax.servlet.servlet response;

导入javax.servlet.http.http servlet;

import javax.servlet.http.http servlet请求;

import javax.servlet.http.http无servlet保罗;

导入javax.servlet.http.http session;

publicclassrightfilterextendshttpservletimplementsfilter {

publicvoiddofilter (servletrequestarg 0,ServletResponsearg1,

FilterChainarg2) throwsIOException,ServletException{

httpservletresponseresponse=(http servlet response ) arg1;

httpservletrequestrequest=(http servlet request ) arg0;

htpsessionsession=request.getsession (true;

string user代码=(string ) session.getattribute (' user代码); //

string URL=request.getrequest uri (;

if (user code==null|| user code.equals (' ) )

{

//判断获取的路径不为空,不是访问登录页面或登录操作时跳

if(URL!=空! url.equals (' ' ) ) URL.index of (log in ) )0URL.index of (log in ) ) )

{

response.sendRedirect (登录路径);

返回;

}

}

//验证通过,用户访问继续

arg2.dofilter(arg0,arg1);

返回;

}

公共语音识别(过滤器配置G0 ) throwsServletException{

//todo自动生成方法

}

配置中的过滤器映射定义了要筛选的请求的类型。 上述配置将过滤对jsp页和操作的所有请求。 无论struts2或spring框架如何,过滤器实现都将在用户请求成功之前执行。 过滤器可以使用response.sendRedirect ' '等方法

跳转到所需链接(如登录页面、错误页面等),如果不需要跳转,请单击arg2.dofilter(arg0、arg1); 您可以继续请求用户。 使用filter时,请注意不要连续跳两次。 否则,将报告Java.lang.illegalstateexception错误。 虽然网络上有具体的配置方法,但除非有必要,否则不建议使用/* (过滤所有访问)配置方法。 这样配置将过滤对图像、js文件和css文件等的访问

拦截器拦截器实现:

配置:struts.xml

Login.jsp

/error.jsp

代码:

importjava.util.HashMap;

importjava.util.Map;

import com.opensymphony.xwork2. action;

import com.opensymphony.xwork2. action invocation;

import com.opensymphony.xwork2. interceptor.abstract interceptor;

import com.opensymphony.xwork2. action context;

publicclassrightinterceptorextendsabstractinterceptor {

@Override

公共字符串截取(actioninvocationinvocation (throws exception ) )。

//System.out.println ('拦截器开始验证');

特里

{

actioncontextactioncontext=action context.get context (;

map session=action context.getsession (;

string user=session.get (user code ) ).toString );

//如果当前用户会话无效,并且访问的操作不是登录操作,则执行阻止并跳转

if () user==null||user.equals (' ) )! invocation.getAction ().getClass ().getName ).equals ('登录action ' ) )

{

returnAction.LOGIN;

}

}

catch(Exceptione )

{

e .打印堆栈跟踪(;

returnAction.LOGIN;

}

//System.out.println ('拦截器通过验证) );

returninvocation.invoke (; //执行访问的操作

}

}

阻止程序由spring管理,仅适用于操作,不能阻止其他资源(如jsp页或图像)。 拦截器监听用户对操作的访问,如果需要跳转,则只需返回result,就像action一样,spring根据result的配置执行跳转。 如果不需要跳,请输入invocation.invoke (; 方法执行用户请求的操作。 拦截在动作之前开始,在动作完成后结束(如果被拦截,则根本不执行动作)。

如果不执行此操作,过滤器和阻止程序都将阻止成功的登录操作,因此过滤器将确定用户访问的url是否为登录操作或登录页面,阻止程序将用户访问的操作登录到操作(其他区别方法还没想好,留下问题。 )

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。