码迷,mamicode.com
首页 > 其他好文 > 详细

struts登录案例和自定义拦截器

时间:2014-07-25 00:09:34      阅读:336      评论:0      收藏:0      [点我收藏+]

标签:des   http   使用   os   文件   io   for   re   

struts登录案例:
struts.xml
<struts>
 <constant name="struts.devMode" value="true" />
 <constant name="struts.custom.i18n.resources" value="messages"></constant>
 <package name="basic" extends="struts-default" namespace="/">
  <interceptors>
   <interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"></interceptor>
  </interceptors>
  <global-results>
   <result name="login">/login.jsp</result>
  </global-results>
  <action name="book_*" class="cn.itcast.action.BookAction" method="{1}">
   <interceptor-ref name="privilege"></interceptor-ref>
   <interceptor-ref name="defaultStack"></interceptor-ref>
  </action>
 </package>
 <package name="login" extends="struts-default" namespace="/">
  <action name="login" class="cn.itcast.action.LoginAction">
   <result name="input">/login.jsp</result>
   <result>/index.jsp</result>
  </action>
 </package>
</struts>
messages.properties(国际话信息):
username.required=用户名不能为空
username.length=用户名不能小于三个字符
password.required=密码不能为空
loginfail=用户名或者密码错误

action:
LoginAction:
public class LoginAction extends ActionSupport implements ModelDriven<User> {
 private User user=new User();
 @Override
 public User getModel() {
  return user;
 }
 @Override
 public String execute() throws Exception {
  QueryRunner qr=new QueryRunner(DBCPUtil.getDataSource());
  String sql="select * from user where username=? and password=?";
  User loginUser=qr.query(sql, new BeanHandler<User>(User.class),user.getUsername(),user.getPassword());
  if(loginUser==null){
   this.addActionError(this.getText("loginfail"));
   return INPUT;
  }else{
   ServletActionContext.getRequest().getSession().setAttribute("loginUser", loginUser);
   return SUCCESS;
  }
 }
}

LoginAction-validation.xml:
 <!DOCTYPE validators PUBLIC
    "-//Apache Struts//XWork Validator 1.0.3//EN"
    "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
 <field name="username">
  <field-validator type="requiredstring">
   <message key="username.required"></message>
  </field-validator>
  <field-validator type="stringlength">
   <param name="minLength">3</param>
   <message key="username.length"></message>
  </field-validator>
 </field>
 <field name="password">
  <field-validator type="requiredstring">
   <message key="password.required"></message>
  </field-validator>
 </field>
</validators>

jsp:
login.jsp:
  <s:fielderror />
  <s:actionerror/>
    <form action="${pageContext.request.contextPath}/login.action" method="post">
     用户名:<input type="text" name="username"/>
     密码:<input type="password" name="password"/>
     <input type="submit" value="登录">
    </form>
  </body>

 
自定义拦截器
 拦截器 的使用 ,源自Spring AOP(面向切面编程)思想
 拦截器 采用 责任链 模式
  *  在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。
     *  责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行
  
在struts2 中可以定义很多个拦截器,将多个拦截器按照特定顺序 组成拦截器栈 (顺序调用 栈中的每一个拦截器 )

1、 struts2 所有拦截器 都必须实现 Interceptor 接口
2、 AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy 提供了一个空白的实现

所有实际开发中,自定义拦截器 只需要 继承 AbstractInterceptor类, 提供 intercept 方法实现

3、 常用struts2 拦截器
 <interceptor-ref name="modelDriven"/> 模型驱动
 <interceptor-ref name="fileUpload"/> 文件上传
 <interceptor-ref name="params"> 参数解析封装
 <interceptor-ref name="conversionError"/> 类型转换错误
 <interceptor-ref name="validation"> 请求参数校验
 <interceptor-ref name="workflow"> 拦截跳转 input 视图

案例 : 登陆,对其它Action访问  通过自定义拦截器 进行权限控制
 导入jar包 (struts2 jar、c3p0、 dbutils、 mysql驱动)
 web.xml
 struts.xml
 JDBCUtils 工具类

第一步 : 编写index.jsp 提供 图书增删改查 四个功能
   编写BookAction ,提供四个业务方法
  
第二步: 完成登陆功能   

第三步 :必须要登陆 才能进行图书管理
 使用Filter 进行权限控制 ---- 过滤所有web请求 (所有web资源访问)
 使用拦截器 进行权限控制 ---- 主要拦截对Action访问  (不能拦截JSP)

定义拦截器 继承AbstractInterceptor

配置拦截器
 方式一
  <!-- 注册拦截器 -->
  <interceptors>
   <interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"></interceptor>
  </interceptors>
  <action name="book_*" class="cn.itcast.action.BookAction" method="{1}" >
   <!-- 使用拦截器 -->
   <!-- 当使用自定义拦截器 后,默认拦截器 就会失效  -->
   <interceptor-ref name="defaultStack"></interceptor-ref>
   <interceptor-ref name="privilege"></interceptor-ref>
  </action>
 方式二
  <!-- 注册拦截器 -->
  <interceptors>
   <interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"></interceptor>
   <!-- 自定义拦截器栈 -->
   <interceptor-stack name="privilegeStack">
    <interceptor-ref name="defaultStack"></interceptor-ref>
    <interceptor-ref name="privilege"></interceptor-ref>
   </interceptor-stack>
  </interceptors>
  
  <!-- 设置当前包 所有Action 都使用 自定义拦截器栈 -->
  <default-interceptor-ref name="privilegeStack"></default-interceptor-ref>

struts登录案例和自定义拦截器,布布扣,bubuko.com

struts登录案例和自定义拦截器

标签:des   http   使用   os   文件   io   for   re   

原文地址:http://my.oschina.net/u/1589656/blog/294468

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!