struts2笔记2.2

5.tomcat认证访问

接上例:namespce的作用除了在前面提到的避免协同开发名字冲突外,还为认证提供一个条件。比如jack开发的东西所关联到的页面需要权限才能被访问。由于多为tomcat中的内容,下面只列出步骤。
步骤一,tomcatconf目录下tomcat-users.xml内容如下:
<?xml version='1.0' encoding='utf-8'?>

<tomcat-users>

  <role rolename="manager"/>

  <role rolename="admin"/>

  <user username="jack" password="jack" roles="admin,manager"/>

  <user username="tom" password="tom" roles="manager"/>

</tomcat-users>
步骤二,在web.xml中增加如下内容:
<security-constraint>

       <web-resource-collection>

           <web-resource-name>jack</web-resource-name>

           <url-pattern>/jack/*</url-pattern>

           <http-method>POST</http-method>

           <http-method>GET</http-method>

       </web-resource-collection>

       <auth-constraint>

           <role-name>admin</role-name>

       </auth-constraint>

    </security-constraint>

 

    <security-role>

       <role-name>admin</role-name>

    </security-role>

 

    <login-config>

       <auth-method>BASIC</auth-method>

       <realm-name>input authentication message</realm-name>

    </login-config>

这样配置完成后,当我们访问.../jack中的任何内容都会要求输入密码认证信息,认证时输入tomcat-users.xml配置的admin权限的用户名和密码即可访问(这里就只有jack用户名可以访问)

6.初识拦截器

拦截器能在action被调用之前和被调用之后执行一些代码Struts2框架的大部分核心功能都是通过拦截器来实现的,如防止重复提交、类型转换、对象封装、校验、文件上传、页面预装载等等,都是在拦截器的帮助下实现的。每一个拦截器都是独立装载的(pluggable),我们可以根据实际的需要为每一个action配置它所需要的拦截器。

myStruts2项目下,重新对配置文件作如下修改:
<package name="myFirst" namespace="/" extends="struts-default">

<interceptors>

<interceptor name="timer"

              class="com.opensymphony.xwork2.interceptor.TimerInterceptor" />


   
<interceptor name="params"                                                                                                      class="com.opensymphony.xwork2.interceptor.ParametersInterceptor" />

    </interceptors>

 

       <action name="login" class="com.asm.LoginAction">

           <interceptor-ref name="timer"></interceptor-ref>

           <interceptor-ref name="params"></interceptor-ref>

           <result name="loginSuccess">/success.jsp</result>

           <result name="loginFailure">/failure.jsp</result>

       </action>

    </package>

首先在package中定义了两个拦截器,然后在login action中引用了这两个拦截器,需要说明的是这里使用的拦截器都是系统自带的拦截器。其实在extends所继承的struts-default中就包含了很多拦截器,也包括我们这里所用的拦截器,但如果在此action中不使用params拦截器,将会报空指针错,因为params拦截器的作用是传递表单参数,如果不使用此拦截器就不能在action中得到表单参数,所以引用时会报空指针错。虽然extends继承的strust-default自带有params拦截器,但是当我们自己引用了拦截器时,继承struts-default将不会再为我们分配默认的拦截器(有点类似构造器),但是我们仍然可以通过<interceptor-ref name="defaultStack"/>来继续使用struts-defalut的拦截器。补充:由于上面的package继承于struts-default,而我们这里所用到的timerparams都是在struts-defalut中定义过,所以即使我们在<interceptors>中没有定义过这两个拦截器,也可以直接在action中引用。

使用</interceptor-stack>组合多个拦截器:比如我们想把上面的paramstimer这两个拦截器组合:

    <interceptor-stack name="timer_param">

              <interceptor-ref name="timer" />

              <interceptor-ref name="params" />

    </interceptor-stack>

然后再在action引用<interceptor-ref name="timer_param"/>”,效果和分别引用两个是一样的。其实我们使用strtus-default中的<interceptor-ref name="defaultStack"/>也是使用interceptor-stack方式。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值