Struts2自定义拦截器
来源:互联网 发布:淘宝刀具 编辑:程序博客网 时间:2024/06/15 14:16
自定义拦截器实现对用户登陆的拦截,当用户没有登陆时跳转到登陆页面提示用户登陆,如果用户输入登陆信息错误提示用户登陆信息不匹配,如果成功跳转到首页。
代码实现:
jsp文件:
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>用户登录</title></head><body> <s:fielderror></s:fielderror> <form action="${pageContext.request.contextPath}/userAction_login" method="post"> 用户名: <input type="text" name="username" /> <br/> 密码: <input type="password" name="password" /> <br/> <input type="submit" value="登录" /> </form></body></html>
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> ${loginUser.username},欢迎登录</body></html>
action类
package com.my.action;import com.my.bean.User;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;public class UserAction extends ActionSupport implements ModelDriven<User> { private User user = new User(); public String login(){ return "login"; } public String index(){ return SUCCESS; } public User getModel() { return this.user; } public void validateLogin() { if("jack".equals(user.getUsername()) && "1234".equals(user.getPassword())){ //登录--session ActionContext.getContext().getSession().put("loginUser", user); } else { //信息有误 this.addFieldError("username", "用户名与密码不匹配"); } }}
拦截器类,实现Interceptor接口,覆写intercept方法。
public class LoginInterceptor implements Interceptor { @Override public void init() { } @Override public String intercept(ActionInvocation invocation) throws Exception { //如果session有数据则放行,没有数需要登录 Object userLogin = ActionContext.getContext().getSession().get("loginUser"); if(userLogin == null){ //需要登录 Object action = invocation.getAction(); if(action instanceof ActionSupport){ ActionSupport actionSupport = (ActionSupport) action; actionSupport.addFieldError("username", "请登录"); } return "input"; } // 放行 return invocation.invoke(); } @Override public void destroy() { }}
在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="login" namespace="/" extends="struts-default"> <interceptors> <!-- 注册拦截器 --> <interceptor name="loginInterceptor" class="com.my.interceptor.LoginInterceptor"></interceptor> <!-- 编写自定义拦截器栈 --> <interceptor-stack name="loginStack"> <!-- 先引用 父类的默认拦截器栈 --> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 将自己添加到 默认拦截器栈之后 --> <interceptor-ref name="loginInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> <action name="userAction_*" class="com.my.action.UserAction" method="{1}"> <result name="login" type="redirectAction"> <param name="namespace">/</param> <param name="actionName">userAction_index</param> </result> <result name="success">/success.jsp</result> <result name="input">/login.jsp</result> <interceptor-ref name="loginStack"></interceptor-ref> </action> </package></struts>
因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defaultStack,这样应用才可以使用struts2框架提供的众多功能。
如果希望包下的所有action都使用自定义的拦截器,可以通过<default-interceptor-ref name=“permissionStack”/>
把拦截器定义为默认拦截器。每个包只能指定一个默认拦截器。另外,一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用。
运行结果:
0 0
- struts2 自定义拦截器
- Struts2自定义拦截器
- Struts2自定义拦截器
- struts2自定义拦截器
- Struts2自定义拦截器
- Struts2自定义拦截器
- Struts2自定义拦截器
- Struts2自定义拦截器
- struts2自定义拦截器
- Struts2---自定义拦截器
- struts2自定义拦截器
- struts2自定义拦截器
- Struts2自定义拦截器
- struts2自定义拦截器
- struts2自定义拦截器
- struts2自定义拦截器
- struts2自定义拦截器
- struts2自定义拦截器
- 按行写文件
- java中的Iterator
- 18.剑指offer-连续子数组的最大和
- Linux常用命令(二)之用户与分组
- HFUT-ACM1354砝码称重
- Struts2自定义拦截器
- War of the Corporations(字符串子串的查找)
- 数据标准化 Data Normalization
- NYOJ325 zb的生日
- RGB和Bitmap互相转换
- 文章标题
- 412. Fizz Buzz
- Linux 批量杀死 进程
- 数据结构:实验八(图的操作及入度和出度的计算)