webwork 如何用handlerinterceptorr做一个登录拦截器

鬼king2号 的BLOG
用户名:鬼king2号
文章数:12
访问量:3149
注册日期:
阅读量:5863
阅读量:12276
阅读量:313318
阅读量:1027640
51CTO推荐博文
&&&&&&&web开发中经常会遇到浏览网页时,需要用户登陆之后才能访问一些重要的页面,当你访问一些“非法”页面时,也就是如果检查你还没有登录进该系统,则需要先登录,只要你成功登录就可以访问信管内容,实现该功能需要&&&&HandlerInterceptorAdapter,这个类中有三个重要的方法,灰色老哥方法可以先不关注,主要代码实现是绿色那一部分,代码如下:&&&&&&&&/**&&&&&&&&&*&@author&&tony&&&&&&&&&*&@date&&&&&&&&&&&*/&&&&&&&&/**&&&&&&&&&*&登录拦截器,只有登录之后才能访问&&&&&&&&&*/&&&&&&&&public&class&LoginInterceptor&extends&HandlerInterceptorAdapter{&&&&&&&&@Override&&&&&&&&public&void&afterCompletion(HttpServletRequest&request,&&&&&&&&HttpServletResponse&response,&Object&handler,&Exception&ex)&&&&&&&&throws&Exception&{&&&&&&&&super.afterCompletion(request,&response,&handler,&ex);&&&&&&&&}&&&&&&&&&&@Override&&&&&&&&public&void&postHandle(HttpServletRequest&request,&&&&&&&&HttpServletResponse&response,&Object&handler,&&&&&&&&ModelAndView&modelAndView)&throws&Exception&{&&&&&&&&super.postHandle(request,&response,&handler,&modelAndView);&&&&&&&&} &&&& //&应许通过的&&&&&&&&private&static&final&String[]&IGNORE_URI&=&{"/login.from","/toLogin.from"};&&&&&&&&@Override&&&&&&&&public&boolean&preHandle(HttpServletRequest&request,&&&&&&&&HttpServletResponse&response,&Object&handler)&throws&Exception&{&&&&&&&&request.setCharacterEncoding("utf-8");&&&&&&&&response.setCharacterEncoding("UTF-8");&&&&&&&&&&&&&&&&&&response.setContentType("text/charset=UTF-8");&&&&&&&&String&url&=&request.getRequestURI().toString();&&&&&&&&System.out.println(url);&&&&&&&&boolean&flag&=&&&&&&&&&for&(String&s&:&IGNORE_URI)&{&&&&&&&&&&&&&&&&&&&&if&(url.contains(s))&{&//&如果是登陆页面的请求&则放过&&&&&&&&&&&&&&&&&&&&&&&&flag&=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}}&&&&&&&&if(!flag){&&&&&&&&User&user&=&(User)request.getSession().getAttribute("user");&&&&&&&&System.out.println(user);&&&&&&&&if(user&==&null){&//&检查是否登陆,否则跳回登陆页面&&&&&&&&&&&&&&& PrintWriter&out&=&response.getWriter();&&&&&&&&&&&&&&&&&&StringBuilder&builder&=&new&StringBuilder();&&&&&&&&&&&&&&& & builder.append("&script&type=\"text/javascript\"&charset=\"UTF-8\"&");&&&&&&&&&&&&&&&&&&builder.append("alert(\"您还未登录,请先登录&&&&&&&&&&&&&&&&builder.append("window.top.location.href=\"");&&&&&&&&&&&&&&& & builder.append("/StudentSystem/login/toLogin.from\";&/script&");&&&&&&&&&&&&&&&&&&&&&&out.print(builder.toString());&&&&&&&&&&&&&&&&&&&&&&out.close();&&&&&&&&&&return&&&&&&&&&}}&&&&&&&&return&&&&&&&&&}}&&&&&&&&当然实现了登录检查之后,需要将自定义这个拦截器在主配置文件中注册 &&&&spring_mvc.xml注册拦截器代码如下:&&&&&&&&&!--&配置登陆拦截器&--&&&&&&mvc:interceptors&&&&&&&&&&&&&&mvc:interceptor&&&&&&&&&&&&&&!--path="/**"//**表示所有文件夹及子文件夹&--&&&&&&&&&&&&&&&&&&mvc:mapping&path="/**"/&&&&&&&&&&&&&&&&&&bean&id="loginInterceptor"&class="edu.nwsuaf.xc.interceptor.LoginInterceptor"/&&&&&&&&&&&&&&/mvc:interceptor&&&&&&&&&&/mvc:interceptors&&&& &&&&这个是在springMVC下实现的。本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)查看: 7428|回复: 7
struts2中使用拦截器(Interceptor)控制登录和权限
论坛徽章:14
在jsp servlet中我们通常使用Servlet Filter控制用户是否登入, 是否有权限转到某个页面。在struts2中我们应该会想到他的拦截器(Interceptor), Interceptor在struts2中起着非常重要的作用。 很多struts2中的功能都是使用Interceptor实现的。
需求:简单的登入界面,让用户输入用户名、密码、记住密码(remember me)。 如果用户选中remember me的话, 下次就不需要再登入了(使用cookie实现, 用需要点击logout取消remeber me功能)。 如果用户起始输入的地址不是登入页面的话,在用户登入之后需要转到用户输入的起始地址。
我们先看看LoginInterceptor.java
package com.javaeye.dengyin2000.wallet.& &
import java.util.M& &
import javax.servlet.http.C& &
import javax.servlet.http.HttpServletR& &
import mons.lang.StringU& &
import org.apache.struts2.StrutsS& &
import com.javaeye.dengyin2000.wallet.dao.UserDAO;& &
import com.javaeye.dengyin2000.wallet.dao.UserNotFoundE& &
import com.javaeye.dengyin2000.wallet.domains.U& &
import com.opensymphony.xwork2.ActionC& &
import com.opensymphony.xwork2.ActionI& &
import com.opensymphony.xwork2.interceptor.AbstractI& &
public class LoginInterceptor extends AbstractInterceptor {& &
& & public static final String USER_SESSION_KEY=&wallet.session.user&;& &
& & public static final String COOKIE_REMEMBERME_KEY=&wallet.cookie.rememberme&;& &
& & public static final String GOING_TO_URL_KEY=&GOING_TO&;& &
& & private UserDAO userD& &
& & @Override&&
& & public String intercept(ActionInvocation invocation) throws Exception {& &
& && && &&&
& && &&&ActionContext actionContext = invocation.getInvocationContext();& &
& && &&&HttpServletRequest request= (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);& &
& && && &&&
& && &&&Map session = actionContext.getSession();& &
& && &&&if (session != null && session.get(USER_SESSION_KEY) != null){& &
& && && && &return invocation.invoke();& &
& && &&&}& &
& && && &&&
& && &&&Cookie[] cookies = request.getCookies();& &
& && &&&if (cookies!=null) {& &
& && && && &for (Cookie cookie : cookies) {& &
& && && && && & if (COOKIE_REMEMBERME_KEY.equals(cookie.getName())) {& &
& && && && && && &&&String value = cookie.getValue();& &
& && && && && && &&&if (StringUtils.isNotBlank(value)) {& &
& && && && && && && && &String[] split = value.split(&=="& &
& && && && && && && && &String userName = split[0];& &
& && && && && && && && &String password = split[1];& &
& && && && && && && && &try {& &
& && && && && && && && && & User user = userDao& &
& && && && && && && && && && && && &.attemptLogin(userName, password);& &
& && && && && && && && && & session.put(USER_SESSION_KEY, user);& &
& && && && && && && && &} catch (UserNotFoundException e) {& &
& && && && && && && && && & setGoingToURL(session, invocation);& &
& && && && && && && && && & return &login&;& &
& && && && && && && && &}& &
& && && && && && &&&} else {& &
& && && && && && && && &setGoingToURL(session, invocation);& &
& && && && && && && && &return &login&;& &
& && && && && && &&&}& &
& && && && && && &&&return invocation.invoke();& &
& && && && && & }& &
& && && && &}& &
& && &&&}& &
& && &&&setGoingToURL(session, invocation);& &
& && &&&return &login&;& &
& & private void setGoingToURL(Map session, ActionInvocation invocation){& &
& && &&&String url = &&;& &
& && &&&String namespace = invocation.getProxy().getNamespace();& &
& && &&&if (StringUtils.isNotBlank(namespace) && !namespace.equals(&/&quot){& &
& && && && &url = url +& &
& && &&&}& &
& && &&&String actionName = invocation.getProxy().getActionName();& &
& && &&&if (StringUtils.isNotBlank(actionName)){& &
& && && && &url = url + &/& + actionName + &.action&;& &
& && &&&}& &
& && &&&session.put(GOING_TO_URL_KEY, url);& &
& & public UserDAO getUserDao() {& &
& && &&&return userD& &
& & public void setUserDao(UserDAO userDao) {& &
& && &&&this.userDao = userD& &
package com.javaeye.dengyin2000.wallet.
import java.util.M
import javax.servlet.http.C
import javax.servlet.http.HttpServletR
import mons.lang.StringU
import org.apache.struts2.StrutsS
import com.javaeye.dengyin2000.wallet.dao.UserDAO;
import com.javaeye.dengyin2000.wallet.dao.UserNotFoundE
import com.javaeye.dengyin2000.wallet.domains.U
import com.opensymphony.xwork2.ActionC
import com.opensymphony.xwork2.ActionI
import com.opensymphony.xwork2.interceptor.AbstractI
public class LoginInterceptor extends AbstractInterceptor {
& & & & public static final String USER_SESSION_KEY=&wallet.session.user&;
& & & & public static final String COOKIE_REMEMBERME_KEY=&wallet.cookie.rememberme&;
& & & & public static final String GOING_TO_URL_KEY=&GOING_TO&;
& & & & private UserDAO userD
& & & & @Override
& & & & public String intercept(ActionInvocation invocation) throws Exception {
& & & & & & & &
& & & & & & & & ActionContext actionContext = invocation.getInvocationContext();
& & & & & & & & HttpServletRequest request= (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);
& & & & & & & &
& & & & & & & & Map session = actionContext.getSession();
& & & & & & & & if (session != null && session.get(USER_SESSION_KEY) != null){
& & & & & & & & & & & & return invocation.invoke();
& & & & & & & & }
& & & & & & & &
& & & & & & & & Cookie[] cookies = request.getCookies();
& & & & & & & & if (cookies!=null) {
& & & & & & & & & & & & for (Cookie cookie : cookies) {
& & & & & & & & & & & & & & & & if (COOKIE_REMEMBERME_KEY.equals(cookie.getName())) {
& & & & & & & & & & & & & & & & & & & & String value = cookie.getValue();
& & & & & & & & & & & & & & & & & & & & if (StringUtils.isNotBlank(value)) {
& & & & & & & & & & & & & & & & & & & & & & & & String[] split = value.split(&=="
& & & & & & & & & & & & & & & & & & & & & & & & String userName = split[0];
& & & & & & & & & & & & & & & & & & & & & & & & String password = split[1];
& & & & & & & & & & & & & & & & & & & & & & & & try {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & User user = userDao
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & .attemptLogin(userName, password);
& & & & & & & & & & & & & & & & & & & & & & & & & & & & session.put(USER_SESSION_KEY, user);
& & & & & & & & & & & & & & & & & & & & & & & & } catch (UserNotFoundException e) {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & setGoingToURL(session, invocation);
& & & & & & & & & & & & & & & & & & & & & & & & & & & & return &login&;
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & } else {
& & & & & & & & & & & & & & & & & & & & & & & & setGoingToURL(session, invocation);
& & & & & & & & & & & & & & & & & & & & & & & & return &login&;
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & return invocation.invoke();
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & setGoingToURL(session, invocation);
& & & & & & & & return &login&;
& & & & private void setGoingToURL(Map session, ActionInvocation invocation){
& & & & & & & & String url = &&;
& & & & & & & & String namespace = invocation.getProxy().getNamespace();
& & & & & & & & if (StringUtils.isNotBlank(namespace) && !namespace.equals(&/&quot){
& & & & & & & & & & & & url = url +
& & & & & & & & }
& & & & & & & & String actionName = invocation.getProxy().getActionName();
& & & & & & & & if (StringUtils.isNotBlank(actionName)){
& & & & & & & & & & & & url = url + &/& + actionName + &.action&;
& & & & & & & & }
& & & & & & & & session.put(GOING_TO_URL_KEY, url);
& & & & public UserDAO getUserDao() {
& & & & & & & & return userD
& & & & public void setUserDao(UserDAO userDao) {
& & & & & & & & this.userDao = userD
首先判断session中有没有用户信息, 如果有的话继续, 如果没有的话,检查cookie中有没有rememberme的值,如果有的话,用==分割, 取得用户名密码进行登入。如果没有这个用户的话,记录下request的action地址然后转到登入页面。如果验证有这个用户,则继续下面的interceptor。 如果cookie中没有信息的话,则记录request的action地址然后转到登入页面。 以上就是LoginInterceptor的全部代码。
下面我们看看struts.xml
&?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&& &
& & &package name=&default& extends=&struts-default&&& &
& && &&&&interceptors&& &
& && && && &&interceptor name=&loginInterceptor& class=&loginInterceptor&&&/interceptor&& &
& && && && &&interceptor-stack name=&loginDefaultStack&&& &
& && && && && & &interceptor-ref name=&loginInterceptor&&&/interceptor-ref&& &
& && && && && & &interceptor-ref name=&defaultStack&&&/interceptor-ref&& &
& && && && &&/interceptor-stack&& &
& && &&&&/interceptors&& &
& && &&&&default-interceptor-ref name=&loginDefaultStack&&&/default-interceptor-ref&& &
& && &&&&global-results&& &
& && && && &&result name=&login& type=&redirect&&/login.jsp&/result&& &
& && &&&&/global-results&& && &&&
& && &&&&action name=&index& class=&indexAction&&& &
& && && && &&result&/index.jsp&/result&& &
& && &&&&/action&& &
& && &&&&action name=&logout& class=&logoutAction&&&/action&& &
& && && &&&
& && &&&&action name=&login& class=&loginAction& method=&login&&& &
& && && && &&result type=&redirect&&${goingToURL}&/result&& &
& && && && &&result name=&input&&/login.jsp&/result&& &
& && && && &&interceptor-ref name=&defaultStack&&&/interceptor-ref&& &
& && &&&&/action&& &
& && && &&&
& && &&&&action name=&register& class=&registerAction&&& &
& && && && &&result type=&redirect&&/login.jsp&/result&& &
& && && && &&result name=&input&&/register.jsp&/result&& &
& && && && &&interceptor-ref name=&defaultStack&&&/interceptor-ref&& &
& && &&&&/action&& &
& & &/package&& &
&/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&&
& & & & &package name=&default& extends=&struts-default&&
& & & & & & & & &interceptors&
& & & & & & & & & & & & &interceptor name=&loginInterceptor& class=&loginInterceptor&&&/interceptor&
& & & & & & & & & & & & &interceptor-stack name=&loginDefaultStack&&
& & & & & & & & & & & & & & & & &interceptor-ref name=&loginInterceptor&&&/interceptor-ref&
& & & & & & & & & & & & & & & & &interceptor-ref name=&defaultStack&&&/interceptor-ref&
& & & & & & & & & & & & &/interceptor-stack&
& & & & & & & & &/interceptors&
& & & & & & & & &default-interceptor-ref name=&loginDefaultStack&&&/default-interceptor-ref&
& & & & & & & & &global-results&
& & & & & & & & & & & & &result name=&login& type=&redirect&&/login.jsp&/result&
& & & & & & & & &/global-results&& & & & & & & &
& & & & & & & & &action name=&index& class=&indexAction&&
& & & & & & & & & & & & &result&/index.jsp&/result&
& & & & & & & & &/action&
& & & & & & & & &action name=&logout& class=&logoutAction&&&/action&
& & & & & & & &
& & & & & & & & &action name=&login& class=&loginAction& method=&login&&
& & & & & & & & & & & & &result type=&redirect&&${goingToURL}&/result&
& & & & & & & & & & & & &result name=&input&&/login.jsp&/result&
& & & & & & & & & & & & &interceptor-ref name=&defaultStack&&&/interceptor-ref&
& & & & & & & & &/action&
& & & & & & & &
& & & & & & & & &action name=&register& class=&registerAction&&
& & & & & & & & & & & & &result type=&redirect&&/login.jsp&/result&
& & & & & & & & & & & & &result name=&input&&/register.jsp&/result&
& & & & & & & & & & & & &interceptor-ref name=&defaultStack&&&/interceptor-ref&
& & & & & & & & &/action&
& & & & &/package&
我们是使用的默认的interceptor stack是loginInterceptor, 如果你需要让不登入的用户也能访问的话,你需要配置你的action使用defaultStack。 我们这里的login, register使用的就是defaultStack。 这里要注意的是success的result是我们用LoginInterceptor设过来的值。 这样我们就能够转到用户输入的起始页面。 下面我们再来看看login.jsp 和 loginAction
&%@taglib prefix=&s& uri=&/struts-tags& %&& &
&%@ page language=&java& contentType=&text/ charset=UTF-8&&&
& & pageEncoding=&UTF-8&%&& &
& & &meta http-equiv=&Content-Type& content=&text/ charset=UTF-8&&& &
& & &title&Wallet-Login&/title&& &
&/head&& &
&h2&Login&/h2&& &
&s:actionmessage/&& &
&s:actionerror/&& &
&s:form action=&login& method=&post& validate=&false& theme=&xhtml&&& &
&s:textfield name=&loginName& label=&Username&&&/s:textfield&&br/&& &
&sassword name=&password& label=&Password&&&/sassword&&br/&& &
&s:checkbox label=&Remember Me& name=&rememberMe&&&/s:checkbox&& &
&s:submit value=&%{'Login'}&&&/s:submit&& &
&/s:form&& &
&a href=&register.jsp&&Register&/a&& &
&/body&& &
&%@taglib prefix=&s& uri=&/struts-tags& %&
&%@ page language=&java& contentType=&text/ charset=UTF-8&
& & pageEncoding=&UTF-8&%&
& & & & &meta http-equiv=&Content-Type& content=&text/ charset=UTF-8&&
& & & & &title&Wallet-Login&/title&
&h2&Login&/h2&
&s:actionmessage/&
&s:actionerror/&
&s:form action=&login& method=&post& validate=&false& theme=&xhtml&&
&s:textfield name=&loginName& label=&Username&&&/s:textfield&&br/&
&sassword name=&password& label=&Password&&&/sassword&&br/&
&s:checkbox label=&Remember Me& name=&rememberMe&&&/s:checkbox&
&s:submit value=&%{'Login'}&&&/s:submit&
&a href=&register.jsp&&Register&/a&
package com.javaeye.dengyin2000.wallet.& &
import java.util.M& &
import javax.servlet.http.C& &
import javax.servlet.http.HttpServletR& &
import javax.servlet.http.HttpServletR& &
import mons.lang.StringU& &
import org.apache.struts2.interceptor.CookiesA& &
import org.apache.struts2.interceptor.ServletRequestA& &
import org.apache.struts2.interceptor.ServletResponseA& &
import org.apache.struts2.interceptor.SessionA& &
import com.javaeye.dengyin2000.wallet.dao.UserDAO;& &
import com.javaeye.dengyin2000.wallet.dao.UserNotFoundE& &
import com.javaeye.dengyin2000.wallet.domains.U& &
import com.javaeye.dengyin2000.wallet.interceptor.LoginI& &
import com.opensymphony.xwork2.ActionS& &
public class LoginAction extends ActionSupport implements ServletResponseAware, ServletRequestAware, SessionAware, CookiesAware{& &
& & private UserDAO userD& &
& & private String loginN& &
& & private S& &
& & private boolean rememberMe;& &
& & private HttpServletR& &
& & private HttpServletR& &
& & private M& &
& & private M& &
& & private String goingToURL;& &
& & public String getGoingToURL() {& &
& && &&&return goingToURL;& &
& & public void setGoingToURL(String goingToURL) {& &
& && &&&this.goingToURL = goingToURL;& &
& & public boolean isRememberMe() {& &
& && &&&return rememberMe;& &
& & public void setRememberMe(boolean rememberMe) {& &
& && &&&this.rememberMe = rememberMe;& &
& & public String getLoginName() {& &
& && &&&return loginN& &
& & public void setLoginName(String loginName) {& &
& && &&&this.loginName = loginN& &
& & public String getPassword() {& &
& && &&&& &
& & public void setPassword(String password) {& &
& && &&&this.password =& &
& & public String login()throws Exception{& &
& && &&&try {& &
& && && && &User user = userDao.attemptLogin(loginName, password);& &
& && && && &if (rememberMe){& &
& && && && && & Cookie cookie = new Cookie(LoginInterceptor.COOKIE_REMEMBERME_KEY, user.getLoginName() + &==& + user.getPassword());& &
& && && && && & cookie.setMaxAge(60 * 60 * 24 * 14);& &
& && && && && & response.addCookie(cookie);& &
& && && && &}& &
& && && && &session.put(LoginInterceptor.USER_SESSION_KEY, user);& &
& && && && &String goingToURL = (String) session.get(LoginInterceptor.GOING_TO_URL_KEY);& &
& && && && &if (StringUtils.isNotBlank(goingToURL)){& &
& && && && && & setGoingToURL(goingToURL);& &
& && && && && & session.remove(LoginInterceptor.GOING_TO_URL_KEY);& &
& && && && &}else{& &
& && && && && & setGoingToURL(&index.action"& &
& && && && &}& &
& && && && &return SUCCESS;& &
& && &&&} catch (UserNotFoundException e) {& &
& && && && &addActionMessage(&user name or password is not corrected."& &
& && && && &return INPUT;& &
& && &&&}& &
& & public UserDAO getUserDao() {& &
& && &&&return userD& &
& & public void setUserDao(UserDAO userDao) {& &
& && &&&this.userDao = userD& &
& & public void setServletResponse(HttpServletResponse response) {& &
& && &&&this.response =& &
& & public void setServletRequest(HttpServletRequest request) {& &
& && &&&this.request =& &
& & public void setSession(Map session) {& &
& && &&&this.session =& &
& & public void setCookiesMap(Map cookies) {& &
& && &&&this.cookies =& &
package com.javaeye.dengyin2000.wallet.
import java.util.M
import javax.servlet.http.C
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import mons.lang.StringU
import org.apache.struts2.interceptor.CookiesA
import org.apache.struts2.interceptor.ServletRequestA
import org.apache.struts2.interceptor.ServletResponseA
import org.apache.struts2.interceptor.SessionA
import com.javaeye.dengyin2000.wallet.dao.UserDAO;
import com.javaeye.dengyin2000.wallet.dao.UserNotFoundE
import com.javaeye.dengyin2000.wallet.domains.U
import com.javaeye.dengyin2000.wallet.interceptor.LoginI
import com.opensymphony.xwork2.ActionS
public class LoginAction extends ActionSupport implements ServletResponseAware, ServletRequestAware, SessionAware, CookiesAware{
& & & & private UserDAO userD
& & & & private String loginN
& & & & private S
& & & & private boolean rememberMe;
& & & & private HttpServletR
& & & & private HttpServletR
& & & & private M
& & & & private M
& & & & private String goingToURL;
& & & & public String getGoingToURL() {
& & & & & & & & return goingToURL;
& & & & public void setGoingToURL(String goingToURL) {
& & & & & & & & this.goingToURL = goingToURL;
& & & & public boolean isRememberMe() {
& & & & & & & & return rememberMe;
& & & & public void setRememberMe(boolean rememberMe) {
& & & & & & & & this.rememberMe = rememberMe;
& & & & public String getLoginName() {
& & & & & & & & return loginN
& & & & public void setLoginName(String loginName) {
& & & & & & & & this.loginName = loginN
& & & & public String getPassword() {
& & & & & & & &
& & & & public void setPassword(String password) {
& & & & & & & & this.password =
& & & & public String login()throws Exception{
& & & & & & & & try {
& & & & & & & & & & & & User user = userDao.attemptLogin(loginName, password);
& & & & & & & & & & & & if (rememberMe){
& & & & & & & & & & & & & & & & Cookie cookie = new Cookie(LoginInterceptor.COOKIE_REMEMBERME_KEY, user.getLoginName() + &==& + user.getPassword());
& & & & & & & & & & & & & & & & cookie.setMaxAge(60 * 60 * 24 * 14);
& & & & & & & & & & & & & & & & response.addCookie(cookie);
& & & & & & & & & & & & }
& & & & & & & & & & & & session.put(LoginInterceptor.USER_SESSION_KEY, user);
& & & & & & & & & & & & String goingToURL = (String) session.get(LoginInterceptor.GOING_TO_URL_KEY);
& & & & & & & & & & & & if (StringUtils.isNotBlank(goingToURL)){
& & & & & & & & & & & & & & & & setGoingToURL(goingToURL);
& & & & & & & & & & & & & & & & session.remove(LoginInterceptor.GOING_TO_URL_KEY);
& & & & & & & & & & & & }else{
& & & & & & & & & & & & & & & & setGoingToURL(&index.action"
& & & & & & & & & & & & }
& & & & & & & & & & & & return SUCCESS;
& & & & & & & & } catch (UserNotFoundException e) {
& & & & & & & & & & & & addActionMessage(&user name or password is not corrected."
& & & & & & & & & & & & return INPUT;
& & & & & & & & }
& & & & public UserDAO getUserDao() {
& & & & & & & & return userD
& & & & public void setUserDao(UserDAO userDao) {
& & & & & & & & this.userDao = userD
& & & & public void setServletResponse(HttpServletResponse response) {
& & & & & & & & this.response =
& & & & public void setServletRequest(HttpServletRequest request) {
& & & & & & & & this.request =
& & & & public void setSession(Map session) {
& & & & & & & & this.session =
& & & & public void setCookiesMap(Map cookies) {
& & & & & & & & this.cookies =
差不多就是这么多代码了。 最后看看logoutAction
package com.javaeye.dengyin2000.wallet.& &
import javax.servlet.http.C& &
import javax.servlet.http.HttpServletR& &
import javax.servlet.http.HttpServletR& &
import javax.servlet.http.HttpS& &
import org.apache.struts2.interceptor.ServletRequestA& &
import org.apache.struts2.interceptor.ServletResponseA& &
import com.javaeye.dengyin2000.wallet.interceptor.LoginI& &
import com.opensymphony.xwork2.ActionS& &
public class LogoutAction extends ActionSupport implements ServletRequestAware , ServletResponseAware{& &
& & private HttpServletR& &
& & private HttpServletR& &
& & public String execute() throws Exception{& &
& && &&&HttpSession session = request.getSession(false);& &
& && &&&if (session!=null)& &
& && && && &session.removeAttribute(LoginInterceptor.USER_SESSION_KEY);& &
& && && &&&
& && &&&Cookie[] cookies = request.getCookies();& &
& && &&&if (cookies!=null) {& &
& && && && &for (Cookie cookie : cookies) {& &
& && && && && & if (LoginInterceptor.COOKIE_REMEMBERME_KEY.equals(cookie& &
& && && && && && && && &.getName())) {& &
& && && && && && &&&cookie.setValue(&"& &
& && && && && && &&&cookie.setMaxAge(0);& &
& && && && && && &&&response.addCookie(cookie);& &
& && && && && && &&&return &login&;& &
& && && && && & }& &
& && && && &}& &
& && &&&}& &
& && &&&return &login&;& &
& & public void setServletRequest(HttpServletRequest request) {& &
& && &&&this.request =& &
& & public void setServletResponse(HttpServletResponse response) {& &
& && &&&this.response =& &
package com.javaeye.dengyin2000.wallet.
import javax.servlet.http.C
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
import org.apache.struts2.interceptor.ServletRequestA
import org.apache.struts2.interceptor.ServletResponseA
import com.javaeye.dengyin2000.wallet.interceptor.LoginI
import com.opensymphony.xwork2.ActionS
public class LogoutAction extends ActionSupport implements ServletRequestAware , ServletResponseAware{
& & & & private HttpServletR
& & & & private HttpServletR
& & & & public String execute() throws Exception{
& & & & & & & & HttpSession session = request.getSession(false);
& & & & & & & & if (session!=null)
& & & & & & & & & & & & session.removeAttribute(LoginInterceptor.USER_SESSION_KEY);
& & & & & & & &
& & & & & & & & Cookie[] cookies = request.getCookies();
& & & & & & & & if (cookies!=null) {
& & & & & & & & & & & & for (Cookie cookie : cookies) {
& & & & & & & & & & & & & & & & if (LoginInterceptor.COOKIE_REMEMBERME_KEY.equals(cookie
& & & & & & & & & & & & & & & & & & & & & & & & .getName())) {
& & & & & & & & & & & & & & & & & & & & cookie.setValue(&"
& & & & & & & & & & & & & & & & & & & & cookie.setMaxAge(0);
& & & & & & & & & & & & & & & & & & & & response.addCookie(cookie);
& & & & & & & & & & & & & & & & & & & & return &login&;
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & return &login&;
& & & & public void setServletRequest(HttpServletRequest request) {
& & & & & & & & this.request =
& & & & public void setServletResponse(HttpServletResponse response) {
& & & & & & & & this.response =
这里需要注意的是需要把cookie也清理下。
applicationContext-struts.xml
&?xml version=&1.0& encoding=&UTF-8&?&& &
&!DOCTYPE beans PUBLIC& &
& & &-//SPRING//DTD BEAN//EN&& &
& & &http://www.springframework.org/dtd/spring-beans.dtd&&& &
&beans&& &
& & &!-- Example of SAF2 action instantiated by Spring --&& &
& & &!-- bean id=&helloWorldAction& class=&tutorial.HelloWorldAction& singleton=&false& /&& &
& &&&--&& &
& &&&&bean id=&indexAction& class=&com.javaeye.dengyin2000.wallet.actions.IndexAction& singleton=&false&&&/bean&& &
& &&&&bean id=&loginAction& class=&com.javaeye.dengyin2000.wallet.actions.LoginAction& singleton=&false&&& &
& && &&&&property name=&userDao& ref=&userDao& /&& &
& &&&&/bean&& &
& &&&&bean id=&logoutAction& class=&com.javaeye.dengyin2000.wallet.actions.LogoutAction& singleton=&false&&&/bean&& &
& &&&&bean id=&registerAction& class=&com.javaeye.dengyin2000.wallet.actions.RegisterAction& singleton=&false&&&/bean&& &
& &&&&!-- the following is struts2 interceptors --&& &
& &&&&bean id=&loginInterceptor& class=&com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor&&& &
& && &&&&property name=&userDao& ref=&userDao& /&& &
& &&&&/bean&& &
& &&&&bean id=&userDao& class=&com.javaeye.dengyin2000.wallet.dao.UserDAOImpl&&& &
& &&&&/bean&& &
论坛徽章:5
我有个小小的问题想问一下,那个cookie为什么要存为
[&wallet.cookie.rememberme& : &username==password&]的形式?
直接存为[&username& : &password&]不是更方便吗?
服务器好像会根据域名只拿它自己写到客户端的cookie吧?
论坛徽章:6
这个没有关系。 你想怎么存就怎么存, 只要你能拿到username 和password
论坛徽章:0
每个文件都写了两遍...
ps:itpubbbs...未登录发言,登录,跳转后竟然显示此论坛只允许特定用户发言...bugbug
论坛徽章:0
出于安全考虑,不应该把密码这种敏感数据保存在客户端cookie
论坛徽章:1
非常感谢,正是我想要的
论坛徽章:0
论坛徽章:349
这类东西首先要明确截取器模式,至于用它实现什么都不是问题!
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号

我要回帖

更多关于 handlerinterceptor 的文章

 

随机推荐