所谓登录验证,就是在执行action之前,判断用户是否登录,这点和struts的filter比较类似,但是和struts filter不同的是,webwork的interceptor可以访问action中的资源
JSP:

<%...@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%...@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<ww:form action="login.dhtml" method="post" >
<ww:textfield label="user" name="user.name"/>
<ww:textfield label="user" name="user.password"/>
<ww:submit value="submit"/>
</ww:form>
</body>
</html>
Login Action:
package ch5.example1;
import java.util.Map;
import com.opensymphony.webwork.interceptor.SessionAware;
import com.opensymphony.xwork.ActionSupport;

public class Login extends ActionSupport implements SessionAware,UserAware ...{
private User user;
Map session;
public User getUser() ...{
return user;
}
public void setUser(User user) ...{
this.user = user;
}
public void setSession(Map arg0) ...{
this.session=arg0;
}
public String doDefault() throws Exception...{
return INPUT;
}
public String execute() throws Exception ...{
if(user.getName().equals("1234")&&user.getPassword().equals("1234"))...{
session.put(AuthInterceptor.USER, user);
return SUCCESS;
}
else...{
session.put("info", "login failed, wrong usrename and password");
return INPUT;
}
}
}
Dobussiness Action:
package ch5.example1;
import com.opensymphony.xwork.ActionSupport;

public class Dobussiness extends ActionSupport ...{
@Override
public String execute() throws Exception ...{
System.out.println("in dobusiness");
return NONE;
}
}
AuthInterceptor:
如果用户没有登录,则不执行Dobussiness Action,返回登录页面
package ch5.example1;
import java.util.Map;
import com.opensymphony.xwork.Action;
import com.opensymphony.xwork.ActionInvocation;
import com.opensymphony.xwork.interceptor.Interceptor;

public class AuthInterceptor implements Interceptor ...{
public static final String USER="user";
public void destroy() ...{
// TODO Auto-generated method stub
}

public void init() ...{
// TODO Auto-generated method stub
}

public String intercept(ActionInvocation actionInvocation) throws Exception ...{
Map session=actionInvocation.getInvocationContext().getSession();
User user=(User)session.get(USER);
System.out.println("in authinterceptor");
if(user==null)...{
return Action.LOGIN;
}
else...{
Action action=(Action)actionInvocation.getAction();
if(action instanceof UserAware)...{
((UserAware)action).setUser(user);
}
}
return actionInvocation.invoke();
}
}
xwork.xml
<package name="default" extends="webwork-default">
<interceptors>
<interceptor name="authcheck" class="ch5.example1.AuthInterceptor"></interceptor>
</interceptors>
<action name="login" class="ch5.example1.Login">
<result name="input">/ch5/login.jsp</result>
<result name="success">/loginsuccess.dhtml</result>
</action>
<action name="loginsuccess" class="ch5.example1.Dobussiness">
<interceptor-ref name="authcheck"></interceptor-ref>
</action>特别需要注意的是:我们只需要在需要进行用户登陆验证的action中加入<interceptor-ref name="authcheck"></interceptor-ref>即可,如果在登录Login Action也加入<interceptor-ref name="authcheck"></interceptor-ref>,则会引起死循环
本文介绍了一个使用 WebWork 框架实现的登录验证系统。该系统包括 JSP 页面、LoginAction、DobussinessAction 和 AuthInterceptor。通过拦截器在执行业务逻辑前检查用户是否已登录。

200

被折叠的 条评论
为什么被折叠?



