struts2过滤器配置中常见问题及正确配置方法详解

教程大全 2026-02-08 19:55:04 浏览

Struts2过滤器是Apache Struts2框架中处理请求与响应的核心组件,通过Servlet过滤器机制在请求到达目标资源(如Action)前或响应返回客户端前执行特定逻辑(如认证、日志记录、性能监控等),合理配置过滤器是保障系统安全、优化请求处理流程的关键,以下从基础概念、配置方法、实际应用及最佳实践等方面详细阐述Struts2过滤器的配置技术。

Struts2过滤器基础

过滤器(Filter)属于Servlet规范中的核心组件,工作原理是在请求到达目标资源前或响应返回前拦截请求/响应流,Struts2的 FilterDispatcher 是框架的核心过滤器,负责解析请求参数、调用拦截器栈并执行Action,过滤器的配置主要涉及两个层面:的部署描述符配置和 struts.xml 的框架配置。

过滤器配置详解

1 web.xml中配置过滤器

在Web应用的中,通过和标签定义过滤器的名称、类以及映射的URL模式,这是Struts2框架的标准配置方式,适用于所有Struts2应用。

struts2org.apache.struts2.dispatcher.FilterDispatcherAPPing>struts2/* 

关键点 struts2过滤器正确 FilterDispatcher 是Struts2的核心过滤器,负责解析请求参数、调用拦截器栈并执行Action。 url-pattern 的设置决定了过滤器的作用范围,通常为以拦截所有请求。

2 struts.xml中配置自定义过滤器

除了框架默认的 FilterDispatcher ,开发者可自定义过滤器并集成到拦截器栈中,配置步骤包括定义过滤器类、设置参数,并在拦截器栈中引用。

示例:自定义认证过滤器

/login.action 

配置说明 :自定义过滤器 MyAuthFilter 通过标签接收配置参数(如登录跳转URL),并在拦截器栈中执行,确保只有通过认证的用户才能访问订单页面。

拦截器栈与过滤器链

Struts2中,过滤器通过“拦截器栈(Interceptor Stack)”和“过滤器链(Filter Chain)”协同工作,拦截器栈是多个拦截器的有序集合,每个拦截器可执行特定逻辑(如日志、权限验证),而过滤器链则是拦截器栈的执行顺序,配置时需注意拦截器的顺序,顺序会影响执行逻辑。

表格:拦截器栈与过滤器链配置示例 | 拦截器名称| 类名| 作用| 顺序(从请求到Action) ||——————|————————–|————————–|————————|| authFilter| com.example.MyAuthFilter | 用户认证验证| 1(最先执行)|| defaultStack| org.apache.struts2.interceptor… | 默认拦截器栈(如参数验证、异常处理) | 2|

执行流程 :当用户访问 order.action 时,请求首先经过 authFilter 验证用户是否登录,若未登录则跳转至登录页面;若已登录,则继续执行后续拦截器(如默认栈的参数验证),最终调用 OrderAction 处理请求。

实际应用案例: 酷番云 电商项目中的过滤器配置

案例背景 :某电商客户通过酷番云云服务部署Struts2应用,需实现用户登录验证、请求日志记录及异常处理,客户采用自定义过滤器实现业务逻辑,提升系统安全性。

配置实现

效果 :该配置实现了用户登录验证、请求日志记录及异常处理,保障了电商系统的安全性和可维护性,客户反馈系统运行稳定,请求处理效率提升20%。

常见问题与最佳实践

1 如何配置多个过滤器顺序?

多个过滤器可通过拦截器栈的顺序控制,先配置认证过滤器,再配置日志过滤器,确保认证逻辑优先执行。

配置示例

2 过滤器中如何处理异常?

Struts2过滤器可通过捕获对象并记录日志,或重定向至错误页面,在自定义过滤器中添加异常处理逻辑:

public class MyAuthFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {try {// 认证逻辑if (!isAuthenticated()) {throw new UnauthorizedException("用户未登录");}chain.doFilter(request, response); // 继续执行后续过滤器} catch (UnauthorizedException e) {request.setAttribute("error", e.getMessage());RequestDispatcher dispatcher = request.getRequestDispatcher("/error.jsp");dispatcher.forward(request, response);}}}

通过以上配置,可有效利用Struts2过滤器实现请求处理、安全验证及日志记录,提升系统性能与安全性,在实际开发中,需根据业务需求灵活配置拦截器栈,并遵循最佳实践,确保系统稳定运行。


可以给别人发邮件,但是收不到邮件,怎么设置,能收到邮件?

A》发不出邮件:因为新浪邮箱最近在升级!等升级完了可能就好了。 1》发邮件出现系统退信的大致原因 如果邮件传输过程中,收到系统退信,请您检查退信的内容,并和下面的几种情况进行比对,查找原因,一般出现退信的大致原因如下: 1、没有找到收件人的地址 退信包含:invalid address (#5.5.0)/User unknown/user is not found/doesnt have this account 出错原因:对方地址不存在或者电子邮件地址输入错误。 解决方法:请您核实一下对方的地址是否正确再次发送。 2、接收方邮箱已经没有足够的空间来接收新邮件 退信包含:mailbox is full/Quota exceed the hard limit for user/mail box space not enough 出错原因:接收方的邮箱已满,没有足够的空间来接收新的邮件。 解决方法:用其它方式通过对方及时的清理出足够的空间来接收这封邮件。 3、超过了对方邮件服务商规定的一封邮件大小的限制 退信包含:552 Message size exceeds fixed limit 出错原因:这封邮件太大了,超过了对方的邮件服务商针对一封邮件大小的限制。 解决方法:将附件拆分成多个部分发送或者让对方换一个较大邮箱来接收这封信件。 4、被对方服务器拒收: 退信包含:Recipient address rejected/552 Error: content rejected/553 Mail data refused 出错原因:被对方邮件服务器拒绝接收 解决方法:告知用户具体原因,需让接收方向网管说明情况,将新浪的地址从黑名单中撤消就可以正常发送信件了。 5、服务器不能建立链接: 退信包含:Sorry, I wasnt able to establish an SMTP connection. (#4.4.1)/550 System is busy 出错原因:对方某一台收件服务器当时正处在繁忙之中或者咱们的服务器和对方链接并不是很顺畅 解决方法:有可能是暂时的情况,测试一下,发送一封信件到目的地址,看看是否有退信。 如果用户反映近一段时间不稳定,一会正常一会有退信,则需请记录投诉信息、退信原件,立即和我们联系进行解决。 6、没有目的邮件主机: 退信包含:Sorry, I couldnt find any host named . (#5.1.2) 出错原因:一般是对方邮件地址@后面部分输入错误或者服务器解析有问题。 解决方法:请用户核实一下对方的地址是否正确再次发送。 另外,您可以使用其他网站的邮箱发送给对方进行测试,看是否出现退信,如果没有,请立即和我们联系。 7、单封信件的收件人过多: 退信包含:Remote host said: 553 Too many recipients in the mail, should less than 20 出错原因:对方对于一封信件的收件人有限制,这封信件的收件人太多了,所以被对方退回。 解决方法:可以单独给这个地址发送一封邮件,或者减少这封信件收件人的商量 8、找不到对方的邮件服务器或者ip地址 退信包含:Sorry, I couldnt find a mail exchanger or IP address 出错原因:一般情况下是对方的邮件服务器配置有修改,修改后需要一到两天才对在网络上同步成功。 解决方法:请您稍后一段时间再次发送,看看能够正常。 如要是反映这种状况持续的时间比较长,而且用其它邮箱发送就没有问题,需要立即和我们联系来解决问题。 2》您好,请问您无法发送邮件时,系统有什么报错信息吗?或者,是收到退信了呢?如果有退信,请将退信按附件方式转发到以下邮箱里 ,并注明查询退信原因,新浪收到您的邮件后,会立刻给您回信的。 另外,请注意一下您填写的收件人地址是否正确,您可以试试,自己给自己发送邮件,看看是否可以发送成功。 另外,如果是通过客户端软件收发邮件的,您可以将您在客户端中设置的服务器地址改成服务器的IP地址,其中免费邮箱POP3服务器IP地址是:202.106.182.168,SMTP服务器IP地址是:202.106.187.158。 任你邮 pop3服务器IP地址是:202.108.35.190 smtp服务器IP地址是:202.108.35.196 然后看一下我的服务器需要身份验证是否打勾,如果没有请打上勾。 换成IP地址后您可以省略DNS解析的步骤。 如果仍不可以正常速度收发邮件,建议您可以做如下测试: 请使用ping的网络命令检查与新浪网邮箱服务器的联接情况,具体方法如下: 如果您的电脑操作系统为:win2000、XP 点击左下角的开始,在弹出的菜单中选择“运行”。 在出现的对话框中输入“cmd”。 此时会弹出一个黑色的DOS状态下的对话框。 在提示符后输入ping空格 (收件服务器)或者(发件服务器)。 如果是任你邮邮箱,就输入ping空格 (收件服务器)或者(发件服务器)。 请提供下面出现的检测结果,请确认问题,谢谢! 如果您的电脑操作系统为:win98、winme 点击左下角的开始,在弹出的菜单中选择程序,这时会出现新的对话框,在其中的附一栏菜单中点选“MS-DOS 方式”。 此时会弹出一个黑色的DOS状态下的对话框。 在提示符后输入ping空格(收件服务器)或者(发件服务器)。 如果是任你邮邮箱,就输入ping空格 (收件服务器)或者(发件服务器)。 请提供下面出现的检测结果,请确认问题,谢谢! 在出现的结果中,如果time此项数值小于100,则为链接速度正常,如果大于150则您的网速较慢,请联络您的网络提供商。 如有更多问题, 请咨询新浪客服中心。 全国统一客服热线 咨询邮箱 3》发不出邮件: 原因很多: 1、对方拒绝接收你的邮件。 即你的邮箱地址被对方屏蔽了;和你朋友联系一下,是不是在设置区设置了拒收; 2、你写的邮箱地址不对,没写清楚,或没写全,无法发送到对方邮箱; 3、对方的邮箱已满,也无法发送到; 4、网络或系统有故障;你可以先退出邮箱,再重新登录试一下; 5、你发送的邮件和附件太大等。 退信是会说明原因的,你可以查看一下是什么原因呀。 另外你可咨询一下新浪客服中心。 全国统一客服热线 咨询邮箱 希望对你有所帮助 4》一般来说,E-mail的发信方式分为两种:一种是通过ISP或免费邮箱服务商提供的SMTP发信服务器中转的发信方式;另一种则是通过本机建立S MTP发信服务器直接发送电子邮件的方式。 1、通过邮件发信服务器发信的收发过程。 在这一发信过程中,首先由发信人通过电脑将电子邮件发送到SMTP发信服务器上,如果发信服务器收到的邮件合法,发信服务器通过一种“存储转发”技术,将该电子邮件在服务器上排队,当轮到该邮件发送顺序时,再由发信服务器将邮件发送到对方的收信服务器(M X邮件交换服务器)上,再由收信服务器转发到POP3服务器上(很多服务器系统的收信服务器和POP3服务器是同一服务器),最后由收件人通过电脑上的客户端软件将电子邮件从P OP3服务器上取走。 2、通过本机直接发送电子邮件的过程。 与上述发送过程不同的是,一些软件提供本机直接发送电子邮件到收信服务器上的功能,其实就是利用本机电脑建立一个SMTP发信服务器,由本机充当发信服务器的功能,绕过I SP或免费邮箱提供的SMTP发信服务器。 因此本机既充当发信人电脑,又充当发信服务器,其发信过程与上述过程类似,但减少了发信人与发信服务器之间的网络传输过程和邮件的排队等待时间。 如有更多问题, 请咨询新浪客服中心。 全国统一客服热线 咨询邮箱 5》由于发信的时候,主要系统会去找@这个个符号,如果没有这个符号,或者输入错误,就会出现这种提示。 经过测试还发现在中文输入状态下,全角输入@的符号跟英文状态下输入的字符差不多。 请在全英文的状态下输入一遍邮箱地址,或者直接粘贴页面上自己的地址发送,可以测试是否正常的。 如有更多问题, 请咨询新浪客服中心。 全国统一客服热线 咨询邮箱 B》为什么收不到朋友的邮件:因为新浪邮箱最近在升级!等升级完了可能就好了。 1》 您好,如果出现无法接收发送邮件的情况,您可以将您在客户端中设置的服务器地址改成服务器的IP地址,其中免费邮箱POP3服务器IP地址是:202.106.182.168,SMTP服务器IP地址是:202.106.187.158。 然后看一下我的服务器需要身份验证是否打勾,如果没有请打上勾。 换成IP地址后您可以省略DNS解析的步骤。 如果仍不可以正常速度收发邮件,建议您可以做如下测试: 请使用ping的网络命令检查与新浪网邮箱服务器的联接情况,具体方法如下: 如果您的电脑操作系统为:win2000、XP 点击左下角的开始,在弹出的菜单中选择“运行”。 在出现的对话框中输入“cmd”。 此时会弹出一个黑色的DOS状态下的对话框。 在提示符后输入ping空格 (收件服务器)或者(发件服务器)。 请提供下面出现的检测结果,请确认问题,谢谢! 如果您的电脑操作系统为:win98、winme 点击左下角的开始,在弹出的菜单中选择程序,这时会出现新的对话框,在其中的附一栏菜单中点选“MS-DOS 方式”。 此时会弹出一个黑色的DOS状态下的对话框。 在提示符后输入ping空格(收件服务器)或者(发件服务器)。 请提供下面出现的检测结果,请确认问题,谢谢! 在出现的结果中,如果time此项数值小于100,则为链接速度正常,如果大于150则您的网速较慢,请联络您的网络提供商。 如有更多问题, 请咨询新浪客服中心。 全国统一客服热线 咨询邮箱 2》为什么免费信箱收不到朋友的来信? 如果您没有收到朋友的信件,请先检查您自己的免费信箱是否有问题?最简单的测试办法是自己给自己发一封邮件,如果发的出去收得到的话,就说明您的免费邮箱一切正常,没有问题。 另外您还要检查是否您垃圾邮件过滤设置不当造成的,请您登陆邮箱内的设置区进行调整。 另外,您可以让对方测试给其他网站邮箱发邮件是否正常,如果不正常,就是对方邮箱服务器的问题。 如果以上三点都没有问题的话,有可能是对方曾经给新浪发垃圾邮件被新浪屏蔽,请您给我们发邮件,主题为:“我收不到对方的邮件”,然后正文里面写明对方的邮件地址是什么和大致情况,我们会通过邮件和对方联系,让对方发一封测试邮件给我们,然后从中查找原因来解决问题。 我们的联系邮箱为,另外也欢迎您通过电话和我们联系,我们的客服电话为(全国统一免长途费热线) 3》为什么收费邮箱(任你邮)收不到朋友的来信? 如果您没有收到朋友的信件,请先检查您自己的收费邮箱(任你邮)是否有问题?最简单的测试办法是自己给自己发一封邮件,如果发的出去收得到的话,就说明您的收费邮箱一切正常,没有问题.另外您还要检查下面是否您垃圾邮件过滤设置不当造成的。 如果以上两点都没有问题的话,很有可能就是中间线路,或者对方邮件服务器有问题造成的,email的接收影响因素很多,一个因素是新浪的邮件服务器,一个因素是中间线路,一个因素是对方服务器,如果中间任何一个环节出现问题的话,都有可能出现收不到邮件的情况,具体是那一个环节出现问题,要根据对方的退信来判断,您可以和对方联系一下看看是否有退信产生,一般出现退信的原因请详细参阅这里。 另外,这里要建议您的是,如果您的收费邮箱曾经导入过免费邮箱,那么我们建议您最好让对方直接给您的收费邮箱地址发邮件,这样可以保证速度最快。 4》可能有下列几种原因: 1、请检查一下邮箱的文件夹,是否邮箱使用空间已满;如果是,请清理邮箱,将邮件下载或清除; 2、请检查邮箱“配置”里的“过滤器”,是否设置了拒收;如果是,请将拒收项目删除; 3、请检查邮箱“配置”的“自动转信”是否设置了转发功能,却没有选择在原站点保留。 因为邮件的传输过程是,发件方编写好邮件后,邮件从发件方服务器上发出,中间要经过线路传输,然后到达接收方服务器上,再由接收方服务器将邮件放到收件人的邮箱目录里,如果中间任何一个环节出现问题,比如是遇到线路或服务器比较繁忙时,就有可能会影响邮件的接收。 您可以自己给自己发送邮件,测试一下,看看收信的速度如何, 这样也比较容易判断问题出在哪里。 一般来说,E-mail的发信方式分为两种:一种是通过ISP或免费邮箱服务商提供的SMTP发信服务器中转的发信方式;另一种则是通过本机建立S MTP发信服务器直接发送电子邮件的方式。 1、通过邮件发信服务器发信的收发过程。 在这一发信过程中,首先由发信人通过电脑将电子邮件发送到SMTP发信服务器上,如果发信服务器收到的邮件合法,发信服务器通过一种“存储转发”技术,将该电子邮件在服务器上排队,当轮到该邮件发送顺序时,再由发信服务器将邮件发送到对方的收信服务器(M X邮件交换服务器)上,再由收信服务器转发到POP3服务器上(很多服务器系统的收信服务器和POP3服务器是同一服务器),最后由收件人通过电脑上的客户端软件将电子邮件从P OP3服务器上取走。 2、通过本机直接发送电子邮件的过程。 与上述发送过程不同的是,一些软件提供本机直接发送电子邮件到收信服务器上的功能,其实就是利用本机电脑建立一个SMTP发信服务器,由本机充当发信服务器的功能,绕过I SP或免费邮箱提供的SMTP发信服务器。 因此本机既充当发信人电脑,又充当发信服务器,其发信过程与上述过程类似,但减少了发信人与发信服务器之间的网络传输过程和邮件的排队等待时间。

请懂得软件工程师考试的高人入内?

软件工程师证书,是有社会培训机构通过培训考核发给的有关证书。 与国家计算机软件水平资格考试不一样。 如JAVA如件工程师,其培训内容包括: 初级部分: 1. Java 面向对象程序设计、Java API使用、数据结构及算法基础、Java高级类特性、异常处理; 2. AWT及Swing图形程序设计、流、网络程序设计、对象序列化、Applet、多线程程序设计、Java应用国际化基础; 3. Java桌面系统项目开发; 4. Java编程基础提高课程:反射机制、设计模式(I)、正则表达式,Java SE5.0新特性等; 5. 基于Oracle的数据库开发及管理、数据库设计、标准SQL、PL/SQL编程; 6. JDBC、JSP2.0、Servlet2.4、JavaBean编程;Tomcat服务器使用、Jbuilder及Eclipse 等集成开发环境; 7. Linux操作系统中的Java程序开发、Linux系统管理; 8. Java Web编程提高课程:JDBC进阶、高效分页处理、过滤器使用技巧、Struts中动态表单验证、DispatchForm等; 高级部分 1. MVC设计模式、Struts架构核心工作机制、国际化、验证框架、Struts Taglib、ORM基础、基于Hibernate的企业级应用; 2. JavaME手机游戏设计、界面程序设计、数据库程序设计、手机短信、多媒体短信(彩信)开发; 3 核心技术、XML、Web Service、异构系统整合、分布式应用开发、WebLogic和JBoss等应用服务器; 4 、UML与系统建模和设计、Rational Rose、软件工程和软件过程模型、版本控制及设计模式; 6. Java 企业级应用开发提高课程:Hibernate使用技巧、设计模式(II)、Spring编程入门、提高Java EE应用的性能; 程序设计 架构、桌面和Web程序设计、与JavaEE平台应用的整合; 职业素质 IT职业规划、沟通技巧、团队合作、专业技术规范、面试技巧等职业技能培训。 完成以上培训课程后,通过考核就可以获得培训机构颁发的合格证书。 现在比较吃香的是JAVA,特别是J2EE,未来3G出来后,手机编程将成为热点,J2EE当然就会很吃香了。 关于证书的权威性,建议你要去知名的培训机构去,最好是像SUN这类国际大公司有关认证所指定的培训机构,这样权威性高些。 一般来讲,软件公司是非常喜欢通过了软件工程师的人员,学历对他们来说并不重要,而重要的是能力。 如果你的能力够强,在一个好的公司的话,这个月薪我想应该是可以拿到的。 其他方面的软件权威考试,在国内当然就是国家计算机软件水平资格考试了。 这是国家级的考试。 回答应该比较详细,应该能得旗了吧。 。

spring boot 怎么注入@configuration类

spring boot 怎么注入@configuration类在实际的web应用程序中,经常需要在请求(request)外面增加包装用于:记录调用日志、排除有XSS威胁的字符、执行权限验证等等。 除了上述提到的之外,Spring Boot自动添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,并且我们在自己的项目中还可以增加别的过滤器。 Spring Boot、Spring Web和Spring MVC等其他框架,都提供了很多servlet 过滤器可使用,我们需要在配置文件中定义这些过滤器为bean对象。 现在假设我们的应用程序运行在一台负载均衡代理服务器后方,因此需要将代理服务器发来的请求包含的IP地址转换成真正的用户IP。 Tomcat 8 提供了对应的过滤器:RemoteIpFilter。 通过将RemoteFilter这个过滤器加入过滤器调用链即可使用它。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐