搭建SSH架构时web.xml文件的部分过滤器

以前做项目 没在意,这次重新做项目 搭建SSH架构时,发现了一些问题。

一般为了项目的安全性,阻止非法访问。我们一般会配置过滤器。只有登录之后 才能进入系统。

我先贴出 我自己搭的项目中。web.xml文件。然后一一说明

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 过滤器 字符转码 -->

[1]

<filter>
<filter-name>Spring character encoding filter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Spring character encoding filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
【2】
<!-- 用户访问请求过滤 请求admin文件夹下资源 需要过滤-->
<filter>
  <filter-name>accessFilter</filter-name>
  <filter-class>com.exam.servlet.RequestFilter</filter-class>
  <init-param>
  <param-name>notCheckUrl</param-name>
  <param-value></param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>accessFilter</filter-name>
  <url-pattern>/admin/*</url-pattern>
</filter-mapping>
<!-- 请求action 需要过滤 -->
<filter>
  <filter-name>loginFilter</filter-name>
  <filter-class>com.exam.servlet.RequestFilter</filter-class>
  <init-param>
  <param-name>notCheckUrl</param-name>
  <param-value>/loginLogin.do</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>loginFilter</filter-name>
  <url-pattern>*.do</url-pattern>
</filter-mapping>
【3】
<!-- struts 过滤器 -->
<filter>
  <filter-name>struts2</filter-name>
  <filter-class>
  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  </filter-class>
</filter>
<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 读取spring配置文件 -->
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/config/applicationContext.xml</param-value>
</context-param>

<!-- spring监听器 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<!-- session 监听器 -->
<listener>
<listener-class>com.exam.servlet.SessionListener</listener-class>
</listener>

<!-- 加载字典信息 -->
<listener>
  <listener-class>com.exam.servlet.DictInit</listener-class>
  </listener>
【4】
<!-- 项目默认页面 -->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>

首先配置了struts过滤器以及spring过滤器。然后我自己加了两个过滤器。分别过滤请求为.do和/admin/*的后缀。

问题一:我加了过滤器,但是在后台仍然访问了action,访问数据库。在前台访问路径如下:

http://localhost:8080/exam/findAllMenu.do

最后看了下,原来是我的struts过滤器 在我自己配置的过滤器之前,也就是【3】放到了【2】前面。

当客户端请求来了之后,首先走的是struts过滤器,所以就访问action了。接下来才是走我自己配置的过滤器。过滤器执行顺序是根据在web.xml中,配置顺序来的。所以所有请求必须先经过我们自己配置的过滤器后,再通过struts过滤器。只要将我们自己配置的过滤器提到 struts 过滤器前面就可以了。

问题二:当请求过滤后不满足条件 我配置的是自动跳转到 登录页面。但是 一直报错。说struts标签不可用。

原因就在于 我将【4】放到了【3】前面了,也就是将欢迎页面放到了struts过滤器上面了。当遇到非法请求,自动跳转到了登录页面,struts过滤器 根本没有走。而我登录页面 又用到了 struts标签。所以就报错了。

只要把 项目默认页面 置于 struts过滤器 下方即可。

注意:web工程中,如果想用struts标签,只要在项目中添加struts功能,在web.xml中配置struts过滤器即可。

以后大家配置过滤器时,一定要注意 过滤器顺序问题。

问题三:页面报出异常 如下

页面引用了struts标签,但是总是报异常

The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]
追根究底 就是 struts过滤器配置有问题

在【3】中配置struts过滤器时,一定要是所有类型的请求。

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值