自定义简单拦截器拦截用户非正常路径访问登录后的内容:
整个实例的过程: 登录页面(login.jsp)-->登录Action(LoginAction.java)-->成功登录后转到另外一个Action(HelloAction.java)在这个Action的跳转配置文件(struts.xml)中加入拦截器-->成功跳转到Hello.jsp
添加的拦截器类命名为LoginInterceptor(LoginInterceptor.java)
在这其中使用一个中间辅助类(User.java)将信息包装在辅助类中。
在HelloAction配置文件中添加登录拦截的作用是使用户不能直接通过访问hello.do进行访问Hello.jsp,而必须通过登录(login.jsp)页面中填写正确的信息成功登录后到达hello.jsp页面。
在这过程中的所有失败操作都将跳转到login.jsp页面
1.登录页面(login.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录页面</title>
</head>
<body>
<s:form action="login.do">
<s:textfield name="user.username" label="用户名"></s:textfield>
<s:password name="user.password" label="密码"></s:password>
<s:submit value="登陆"></s:submit>
</s:form>
</body>
</html>
2.中间辅助类User.java
package Struts.domain;
public class User{
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3.登录Action(LoginAction.java)
package Struts.action;
import Struts.domain.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport {
private User user;
public String execute() throws Exception {
if ("tom_seed".equalsIgnoreCase(userbean.getName())
&& "tom_seed".equalsIgnoreCase(userbean.getPassword())) {
ActionContext.getContext().getSession().put("user", user);
return SUCCESS;
} else {
return INPUT;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
4.成功登录后转到另外一个Action(HelloAction.java)
package Struts.action;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class HelloAction extends ActionSupport {
public String execute()throws Exception{
return SUCCESS;
}
}
5.成功跳转到Hello.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>HelloWorld</title>
</head>
<body>
<center><h3>HelloWorld</h3></center>
</body>
</html>
6.拦截器(LoginInterceptor.java)
package Struts.interceptor;
import java.util.Map;
import Struts.domain.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
@SuppressWarnings("serial")
public class LoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
Map<String, Object> session = arg0.getInvocationContext().getSession();
User user = (User) session.get("user");
if (user == null) {
return Action.LOGIN;
}
return arg0.invoke();
}
}
7.在struts.xml文件中进行配置
<interceptors><!-- 该配置在package中 --> <interceptor name="loginInterceptor" class="Struts.interceptor.LoginInterceptor"> </interceptor> </interceptors> <action name="login" class="Struts.action.LoginInterceptor"> <result name="success" type="redirect">hello.do</result> <result name="input">/login.jsp</result> </action> <action name="hello" class="Struts.action.HelloAction "> <interceptor-ref name="loginInterceptor"></interceptor-ref> <result name="success">/Hello.jsp</result> <result name="login">/login.jsp</result> </action>
在浏览器中输入hello.do后便不能进入Hello.jsp,直接跳到了登录页面,拦截成功