所谓登录验证,就是在执行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 >
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;
}
}
}
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;
}
}
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();
}
}
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 >
< 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>,则会引起死循环