吃完午饭了,公司食堂真垃圾,点了份白切鸡 尽是鸡皮和鸡脖子,就4块肉,下面还垫了层香菜~~~~~~
好了,继续来说下午的拦截器,在上午的基础上加了拦截器
1.改装了下struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="login" namespace="/login" extends="struts-default">
<!-- 定义一个名为 checkLogin 的拦截器 -->
<interceptors>
<!-- 定义权限检查拦截器 -->
<interceptor name="checkLogin" class="com.intohotel.interceptor.CheckLoginInterceptor"></interceptor>
<interceptor-stack name="myDefaultStack">
<!-- 定义拦截器栈包含checkLogin拦截器 -->
<interceptor-ref name="checkLogin"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
<!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>
<!--
action 标签里 name属性代表我们要处理的.action的前面部分
action 标签里 class属性代表我们需要哪个类来处理
result 标签的 name属性代表action类的执行方法的返回值,
action类的默认执行方法是public String execute()
method 是类里面对应的方法
-->
<action name="login" method="login" class="com.intohotel.action.LoginAction">
<result name="success">/result.jsp</result>
<result name="input">/login.jsp</result>
<result name="failer">/login.jsp</result>
<!--拦截器一般配置在 result 元素之后 -->
<interceptor-ref name="myDefaultStack" />
</action>
</package>
</struts>
2.建立CheckLoginInterceptor.java类
package com.intohotel.interceptor;
import java.util.Map;
import com.intohotel.action.LoginAction;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class CheckLoginInterceptor extends AbstractInterceptor{
/**
*
*/
private static final long serialVersionUID = -172631651095541060L;
public static final String UESER_SESSION_KEY = "user";
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
Object action = actionInvocation.getAction();
System.out.println("=======进入登陆拦截器");
if(action instanceof LoginAction){
System.out.println("=======该方法是登陆方法");
return actionInvocation.invoke();
}
//验证session
Map session = actionInvocation.getInvocationContext().getSession();
String username = (String)session.get(UESER_SESSION_KEY);
if(username!=null){
//存在的情况下进行后续操作
System.out.println(username+"=====已登陆");
return actionInvocation.invoke();
}else {
// 否则终止后续操作,返回LOGIN
System.out.println("=====尚未登陆");
return Action.LOGIN;
}
}
}
3.在LoginAction.java中增加seesion设置
google了下
Struts2中Session的使用有2种方法 这里我选择了org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作
等下把那文章贴出来
这里登陆类修改下 登陆后讲用户的姓名设进seesion中
package com.intohotel.action;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.intohotel.interceptor.CheckLoginInterceptor;
import com.opensymphony.xwork2.ActionSupport;
/**
* 因为这个action将会以单独的线程执行,所以你不能用ActionContext,因为它是ThreadLocal.
* 这也就是说如果你要访问session数据,
* 你必须实现 SessionAware结构而不是调用ActionContext.getSesion()
* @author heilwolf
*
*/
public class LoginAction extends ActionSupport implements SessionAware {
/**
*
*/
private static final long serialVersionUID = 7777814042861093731L;
private String username;
private String password;
private Map<String , String> session;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public void setSession(Map session) {
this.session = session;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
/**
* 类里默认的方法 测试struts.xml里 method未指定的话,进入此默认方法
*/
public String execute(){
System.out.println("=======hello 你进入了struts默认的的登陆方法");
if("heilwolf".equals(this.getUsername().trim()) && "123456".equals(this.getPassword())){
return "success";
}else {
this.addFieldError("username", "username or password error!");
return "failer";
}
}
/**
* 登陆的方法,判断用户名密码 用户名:heilwolf 密码:123456
* @return
*/
public String login(){
System.out.println("=======hello 你进入了heilwolf的登陆方法!");
String name=this.getUsername();
String password=this.getPassword();
if("heilwolf".equals(name.trim()) && "123456".equals(password)){
session.put(CheckLoginInterceptor.UESER_SESSION_KEY, name);
return "success";
}else {
this.addFieldError("username", "username or password error!");
return "failer";
}
}
/**
* 一个验证器 登陆的时候会先进行验证
*/
public void validate(){
System.out.println("=======hello 你进入了heilwolf重写的验证器!");
if(null==this.getUsername() || "".equals(this.getUsername().trim())){
this.addFieldError("username", "username error");
}
if(null==this.getPassword() || "".equals(this.getPassword().trim())){
this.addFieldError("password", "password error");
}
}
}
ok!运行登陆后控制台打印
=======进入登陆拦截器
=======该方法是登陆方法
2008-9-4 14:39:39 com.opensymphony.xwork2.validator.ActionValidatorManagerFactory <clinit>
信息: Detected AnnotationActionValidatorManager, initializing it...
=======hello 你进入了heilwolf重写的验证器!
=======hello 你进入了heilwolf的登陆方法!
看到有拦截器后的执行顺序了吧
相关文章记录:
http://www.blogjava.net/max/archive/2006/12/06/85925.html
http://www.java3z.com/cwbwebhome/article/article2/2933.html?id=1626
好了,继续来说下午的拦截器,在上午的基础上加了拦截器
1.改装了下struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="login" namespace="/login" extends="struts-default">
<!-- 定义一个名为 checkLogin 的拦截器 -->
<interceptors>
<!-- 定义权限检查拦截器 -->
<interceptor name="checkLogin" class="com.intohotel.interceptor.CheckLoginInterceptor"></interceptor>
<interceptor-stack name="myDefaultStack">
<!-- 定义拦截器栈包含checkLogin拦截器 -->
<interceptor-ref name="checkLogin"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
<!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>
<!--
action 标签里 name属性代表我们要处理的.action的前面部分
action 标签里 class属性代表我们需要哪个类来处理
result 标签的 name属性代表action类的执行方法的返回值,
action类的默认执行方法是public String execute()
method 是类里面对应的方法
-->
<action name="login" method="login" class="com.intohotel.action.LoginAction">
<result name="success">/result.jsp</result>
<result name="input">/login.jsp</result>
<result name="failer">/login.jsp</result>
<!--拦截器一般配置在 result 元素之后 -->
<interceptor-ref name="myDefaultStack" />
</action>
</package>
</struts>
2.建立CheckLoginInterceptor.java类
package com.intohotel.interceptor;
import java.util.Map;
import com.intohotel.action.LoginAction;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class CheckLoginInterceptor extends AbstractInterceptor{
/**
*
*/
private static final long serialVersionUID = -172631651095541060L;
public static final String UESER_SESSION_KEY = "user";
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
Object action = actionInvocation.getAction();
System.out.println("=======进入登陆拦截器");
if(action instanceof LoginAction){
System.out.println("=======该方法是登陆方法");
return actionInvocation.invoke();
}
//验证session
Map session = actionInvocation.getInvocationContext().getSession();
String username = (String)session.get(UESER_SESSION_KEY);
if(username!=null){
//存在的情况下进行后续操作
System.out.println(username+"=====已登陆");
return actionInvocation.invoke();
}else {
// 否则终止后续操作,返回LOGIN
System.out.println("=====尚未登陆");
return Action.LOGIN;
}
}
}
3.在LoginAction.java中增加seesion设置
google了下
Struts2中Session的使用有2种方法 这里我选择了org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作
等下把那文章贴出来
这里登陆类修改下 登陆后讲用户的姓名设进seesion中
package com.intohotel.action;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.intohotel.interceptor.CheckLoginInterceptor;
import com.opensymphony.xwork2.ActionSupport;
/**
* 因为这个action将会以单独的线程执行,所以你不能用ActionContext,因为它是ThreadLocal.
* 这也就是说如果你要访问session数据,
* 你必须实现 SessionAware结构而不是调用ActionContext.getSesion()
* @author heilwolf
*
*/
public class LoginAction extends ActionSupport implements SessionAware {
/**
*
*/
private static final long serialVersionUID = 7777814042861093731L;
private String username;
private String password;
private Map<String , String> session;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public void setSession(Map session) {
this.session = session;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
/**
* 类里默认的方法 测试struts.xml里 method未指定的话,进入此默认方法
*/
public String execute(){
System.out.println("=======hello 你进入了struts默认的的登陆方法");
if("heilwolf".equals(this.getUsername().trim()) && "123456".equals(this.getPassword())){
return "success";
}else {
this.addFieldError("username", "username or password error!");
return "failer";
}
}
/**
* 登陆的方法,判断用户名密码 用户名:heilwolf 密码:123456
* @return
*/
public String login(){
System.out.println("=======hello 你进入了heilwolf的登陆方法!");
String name=this.getUsername();
String password=this.getPassword();
if("heilwolf".equals(name.trim()) && "123456".equals(password)){
session.put(CheckLoginInterceptor.UESER_SESSION_KEY, name);
return "success";
}else {
this.addFieldError("username", "username or password error!");
return "failer";
}
}
/**
* 一个验证器 登陆的时候会先进行验证
*/
public void validate(){
System.out.println("=======hello 你进入了heilwolf重写的验证器!");
if(null==this.getUsername() || "".equals(this.getUsername().trim())){
this.addFieldError("username", "username error");
}
if(null==this.getPassword() || "".equals(this.getPassword().trim())){
this.addFieldError("password", "password error");
}
}
}
ok!运行登陆后控制台打印
=======进入登陆拦截器
=======该方法是登陆方法
2008-9-4 14:39:39 com.opensymphony.xwork2.validator.ActionValidatorManagerFactory <clinit>
信息: Detected AnnotationActionValidatorManager, initializing it...
=======hello 你进入了heilwolf重写的验证器!
=======hello 你进入了heilwolf的登陆方法!
看到有拦截器后的执行顺序了吧
相关文章记录:
http://www.blogjava.net/max/archive/2006/12/06/85925.html
http://www.java3z.com/cwbwebhome/article/article2/2933.html?id=1626