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>
