`
tom_seed
  • 浏览: 318689 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Struts自定义简单拦截器

阅读更多

自定义简单拦截器拦截用户非正常路径访问登录后的内容:

整个实例的过程: 登录页面(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,直接跳到了登录页面,拦截成功

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics