配置了CAS过滤器之后Struts2的过滤器失效了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置了CAS过滤器之后Struts2的过滤器失效了相关的知识,希望对你有一定的参考价值。

做的一个子系统,现需要集成到门户统一登录。我按照要求配置了他提供的CAS过滤器,结果后面struts的过滤器失效了,但如果把struts过滤器放前面CAS就过滤不了action了。该如何解决这个冲突?配置如下:
<!-- cas登录验证 -->
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>-
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://www.sso.com:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://www.sso.com:8443/cas/proxyValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>192.168.0.147:8086</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.wrapRequest</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- struts2过滤器 -->
<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>*.action</url-pattern>
</filter-mapping>

参考技术A 你有多个过滤器啊,那么他会按你配置的顺序执行的
按<filter-mapping>配置的顺序由下到上挨个过滤的。追问

按道理应该是这样啊,但是我把struts的过滤器放前面,action请求就不会经过CAS的顾虑器,不知道怎么回事

参考技术B http://www.2cto.com/Article/201310/250927.html本回答被提问者采纳

ssh(sturts2_spring_hibernate) 框架搭建之struts2

 

 

        

一、struts2完整流程的逻辑(整体的概述)

  首先,用户在地址栏中输入你的项目访问路径,然后这个请求会发送到服务器,之后服务器发现在web.xml中配置了一个filter过滤器,并且这个过滤器需要对所有的访问进行过滤,在struts搭建之中,首先就要配置一个过滤器,所以我们可以把这个struts看成是一个过滤器,用户的所有请求都需要经过struts进行分配。当服务器接受到用户请求之后就吧这个请求传给struts,具体的处理是依靠 这个web.xml中配置的类,具体怎么处理我们可以不要明白。之后接受到用户的请求,struts.xml进行处理,action标签中name属性为用户访问你的项目时候输入的指定名字,然class属性是定义这个name请求需要进行处理的类,也就是action类,然method是指定使用这个类中的某一个方法。之后调用完这个方法。之后返回一个值,然后在struts.xml指定根据所返回的字符串进行跳转页面。

    具体如下:

      

二、struts2搭建

 1、导入相关的jar包:

    ①:首先从官网下载 struts2,官方下载:http://struts.apache.org/download.cgi#struts252,选择相适合的版本即可。

      ②:解压之后,找到文件夹lib,其中只有下面的包需要导入你的项目中:

    

 

 2、web.xml配置文件:

    ①配置struts2需要使用的filter,使用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter作为处理的类(filter-class)。

    ②具体写法:

     

 3、struts.xml配置文件:

   ①首先在src目录下新建一个xml文件,即struts.xml配置文件  

   ②然后在struts2.xml的配置文件顶部中声明dtd规范,即文档类型定义(document type definition),如下:

    

   ③其次,配置struts2环境:

      具体写法:

       ⑴.在struts标签中定义一个package标签,设置name和extends属性,name属性值为自定义的名字,extends值需要为“struts-defaul”;

       ⑵.在package标签中定义一个action标签,设置属性name和class和method;

        name属性设置的是在URL中访问项目的路径名字;class设置的是业务逻辑处理的类(包名.类名);  

        method属性设置的是需要进行访问的这个类中的指定的方法(写上方法名即可),如果没有设置method属性的值,那默认调用execute()。         

         ⑶在action标签中定义result标签,设置name属性;

        属性值为action标签中method属性中的方法的返回值(这些方法的返回值均为String);

        result标签之间为需要跳转的页面。

       具体如下:

            

      

 

 

 

   4、action处理类

    ①.定义一个class,并且继承ActionSupport,在这个方法中定义一些成员变量和方法;

    ⑴.成员变量一般用来保存数据,或者是等待注入的实例(当spring和struts2结合使用时候,使用属性注入的实例的方法),其中成员变量保存的数据可以是用户请求传过来的参数还可以是从数据库中curd获取到的集合、信息。

    ⑵.这个类中定义的方法的返回值都是String类型,返回的字符串和struts2.xml中的配置相匹配。  

  

三、struts2简单小结: 

      ⑴、是一个用于web应用程序开发的框架,本质上相当于一个servlet。

      ⑵、struts2是由opensymphony开发的webwork2和struts1的结合。struts1是基于model2 (MVC)之上的进一步的完善。

          ⑶、struts2实现了不需要手动写获取参数(需要设置一个属性,设置getter、setter方法);不需要手动写跳转代码(在struts.xml配置文件中配置);并且实现了数据库和JAVA类中的属性类型转换。 

      ⑷、struts中的分包:

        ①action包:页面的跳转和参数的传递和接收。

        ②services包:业务逻辑处理。例如:对从数据库中取出来的数据需进行进一步的判断用户注册时长。

        ③dao包:对数据库的curd操作。但是不对数据进行进一步的操作。

        ④entity包:存放实体类。

        ⑤util包:工具包,例如:数据库连接。

以上是关于配置了CAS过滤器之后Struts2的过滤器失效了的主要内容,如果未能解决你的问题,请参考以下文章

ssh(sturts2_spring_hibernate) 框架搭建之struts2

struts2配置过滤器与拦截器

struts2入门之拦截器

cas有些请求路径不需要单点登录过滤器拦截

自定义cas客户端核心过滤器authenticationFilter

如何配置struts2的过滤器