拦截器+验证

来源:互联网 发布:如何构建大数据平台 编辑:程序博客网 时间:2024/05/22 07:06

拦截器在struts.xml中配置了默认拦截器就不走了,所以要在<action name=....class=..>下写一句<intercepter-ref name="defaultStack"/>

想写一个拦截器实现

通过访问showaction的show.jsp 但是只有登录过了的访问才能到show.jsp 否则显示登录页面要求登录

1. 我用的是域模型:建了一个java类Employ里面对应登录页的两个属性user,password对应getset方法

2.在src下建loginAction类继承actionsupport类,实现sessionaware接口(产生session),在其中产生Employ emp;产生她的setget方法

  在对sessionaware 实现的方法中做动作并在此类中对session进行声明,此session是map类的,在执行方法中进行验证成功则存入session对象中,以便拦截器看有对应session值的就不拦截,否则拦截!

 public class loginAction extends ActionSupport implements SessionAware{
private Employ emp;
  
   private Map<String,Object> session;
@Override
public void setSession(Map<String, Object> arg0) {
this.session=arg0;

}
public Employ getEmp() {
return emp;
}


public void setEmp(Employ emp) {
this.emp = emp;
}




// @Override
// public void validate() {
// if(emp.getUser()==null||("").equals(emp.getUser()))
// {
// this.addFieldError("name", "请输入用户名");
// }
// if(emp.getPassword()==null||("").equals(emp.getPassword())){
// this.addFieldError("password", "请输入密码");
// }
// }


public String dologin()
{

if(emp.getUser().equals("zhangsan")&&(emp.getPassword()).equals("123"))
{
session.put("name",emp);

}
return "success";
}


}

3.建登录页导入<%taglib prefix="s" uri="/struts-tags">

 <s:form action="loginAction" method="post">
        <s:textfield name="emp.user" label="用户名"></s:textfield>
        <s:fielderror fieldName="name"></s:fielderror>
        <s:password name="emp.password" label="密码">
        </s:password><s:fielderror fieldName="password"></s:fielderror>
        <s:submit  key="submit" value="提交"></s:submit> 
    </s:form>

4.在src下建intercepor的class文件 建议在建的时候就继承abstractInteruptor 在生成的方法中通过Context得到session,通过session验证里面有没有存值,若有则放行,否则拦截,,我这里是在struts.xml中定义了全局变量input,拦截直接去登录页

public class myinterceptor extends AbstractInterceptor {


private static final long serialVersionUID = 1L;
   
@Override
public String intercept(ActionInvocation arg0) throws Exception {
     Map<String,Object> session=arg0.getInvocationContext().getSession();
  if(session!=null&&session.get("name")!=null )
  {
 
  return arg0.invoke();
  }
     return "input";
}


}

   

5.配置struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
 <struts>
   <package name="mypackage" extends="struts-default" >
     <interceptors>
     <interceptor name="myinterceptor" class="com.struts.interceptor.myinterceptor">
  </interceptor>
  </interceptors> 

  <global-results>
      <result name="success">/token/topage.jsp</result>
      <result name="input">/token/login.jsp</result>
  </global-results>
     
     
    <action name="loginAction" class="com.struts.action.loginAction" method="dologin">
      
      
    </action>
    <action name="showAction" class="com.struts.action.showAction" method="execute">
      <interceptor-ref name="myinterceptor"></interceptor-ref>
    <result name="show">/token/show.jsp</result>
    </action>
    
</package>
 </struts>

struts.xml配置了全局了<global-result>的,下面的配置action中涉及<global-result>的直接不用写,并且在action的具体代码中都可用到这些result的name实现跳转

对拦截器,都是在package中定义,下面action 所需位置上配置

6.见其他两个小页

登录成功页topage.jsp

和show.jsp




-------------------------------------------------------------------------------------------------------------------------------------------------------------

再讲讲验证,就是输入框如果没写东西就提交就出未填用户名的提示类似的

我这里没有用验证框架

在登录页对应的action中在执行方法上面 右键-source-overwrite-validator方法

在生成的方法中写field-validator ,message什么的


然后就是在登录的jsp页中



写一句<s:fielderror></s:fielderror>

若是特定的则<s:fielderror fieldName="password"></s:fielderror>



0 0
原创粉丝点击