1、使用cookie自动登陆的拦截器(IMemberAware.java):
/**
*
*/
package com.web.struts.inteceptor;
import com.model.Member;
/**
* @author Administrator
*
*/
public interface IMemberAware {
public Member getMember();
public void setMember(Member member);
}
/**
*
*/
package com.web.struts.inteceptor;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.model.Member;
import com.service.IMemberService;
import com.tools.Constant;
/**
* title:会员cookie自动登陆
*
* @author Administrator
* @时间 2009-4-24:下午03:42:25
*/
public class MemberCookieLoginInterceptor extends AbstractInterceptor {
private Member member;
private IMemberService memberService;
/** */
private static final long serialVersionUID = 6998551363568297012L;
@SuppressWarnings("null")
@Override
public String intercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
if (StringUtils.isBlank(username)) {
Cookie[] cookies = request.getCookies();
Cookie member_cookie = null;
if (cookies != null || cookies.length >= 0) {
for (int i = 0; i < cookies.length; i++) {
member_cookie = cookies[i];
if (member_cookie != null
&& StringUtils.isNotBlank(member_cookie.getName())
&& StringUtils.isNotBlank(member_cookie.getValue())
&& member_cookie.getName().equals(
Constant.MEMBER_SESSION_ID)) {
member = memberService.getMember(member_cookie
.getValue());
if (member != null) {
session.setAttribute(Constant.MEMBER_SESSION_ID,
member_cookie.getValue());
}
break;
} else {
member_cookie = null;
}
}
}
}
return invocation.invoke();
}
public Member getMember() {
return member;
}
public void setMember(Member member) {
this.member = member;
}
public void setMemberService(IMemberService memberService) {
this.memberService = memberService;
}
}
3、会员管理面板的拦截器:
/**
*
*/
package com.web.struts.inteceptor;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.model.Member;
import com.service.IMemberService;
import com.tools.Constant;
/**
* title: 用户在线
*
* @author conkeyn
* @时间 2009-3-30:下午01:48:10
*/
public class MemberOnlineInterceptor extends AbstractInterceptor {
/** */
private static final long serialVersionUID = 2470845588966783260L;
private Member member;
private IMemberService memberService;
@SuppressWarnings("null")
@Override
public String intercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
String username = (String) session
.getAttribute(Constant.MEMBER_SESSION_ID);
if (StringUtils.isBlank(username)) {
Cookie[] cookies = request.getCookies();
Cookie member_cookie = null;
if (cookies != null || cookies.length >= 0) {
for (int i = 0; i < cookies.length; i++) {
member_cookie = cookies[i];
if (member_cookie != null
&& StringUtils.isNotBlank(member_cookie.getName())
&& StringUtils.isNotBlank(member_cookie.getValue())
&& member_cookie.getName().equals(
Constant.MEMBER_SESSION_ID)) {
member = memberService.getMember(member_cookie
.getValue());
if (member != null) {
session.setAttribute(Constant.MEMBER_SESSION_ID,
member_cookie.getValue());
}
break;
} else {
member_cookie = null;
}
}
}
}
if (StringUtils.isBlank(username)) {
return "global_login";
} else {
System.out.println(invocation.getClass().getName());
if (invocation instanceof IMemberAware) {
member = memberService.getMember(username);
if (member != null) {
((IMemberAware) invocation).setMember(member);
}
}
return invocation.invoke();
}
}
public Member getMember() {
return member;
}
public void setMember(Member member) {
this.member = member;
}
public void setMemberService(IMemberService memberService) {
this.memberService = memberService;
}
}
4、相关配置文件:
1)spring配置方式:
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="memberOnlineInterceptor" class="com.web.struts.inteceptor.MemberOnlineInterceptor" scope="prototype"> <property name="memberService" ref="memberService" /> </bean> <bean id="memberCookieLoginInterceptor" class="com.web.struts.inteceptor.MemberCookieLoginInterceptor" scope="prototype"> <property name="memberService" ref="memberService" /> </bean> </beans>
2)struts配置方式:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
<include file="struts-manager.xml"></include>
<include file="struts-manager-templ.xml"></include>
<include file="struts-member.xml"></include>
<include file="struts-client.xml"></include>
<include file="struts-account.xml"></include>
<package name="map_main" extends="struts-default">
<!-- 会员Cookie自动登陆 -->
<interceptors>
<!-- 权限拦截器 -->
<interceptor name="MemberCookieLoginInterceptor" class="memberCookieLoginInterceptor" />
<interceptor-stack name="MemberCookieLogin">
<interceptor-ref name="MemberCookieLoginInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="MemberCookieLogin" />
</package>
<package name="map_member" extends="map_main" namespace="/member">
<!-- 会员拦截器 -->
<interceptors>
<!-- 权限拦截器 -->
<interceptor name="memberOn" class="memberOnlineInterceptor" />
<interceptor-stack name="memberOnline">
<interceptor-ref name="memberOn" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
<interceptor-stack name="noneStack"></interceptor-stack>
</interceptors>
<default-interceptor-ref name="memberOnline" />
<global-results>
<result name="global_login" type="redirectAction">
<param name="namespace">/</param>
<param name="actionName">login</param>
</result>
</global-results>
</package>
</struts>