




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
struts2中使用拦截器(Interceptor)控制登录和权限在jsp servlet中我们通常使用Servlet Filter控制用户是否登入, 是否有权限转到某个页面。在struts2中我们应该会想到他的拦截器(Interceptor), Interceptor在struts2中起着非常重要的作用。 很多struts2中的功能都是使用Interceptor实现的。 需求:简单的登入界面,让用户输入用户名、密码、记住密码(remember me)。 如果用户选中remember me的话, 下次就不需要再登入了(使用cookie实现, 用需要点击logout取消remeber me功能)。 如果用户起始输入的地址不是登入页面的话,在用户登入之后需要转到用户输入的起始地址。 我们先看看LoginInterceptor.java Java代码 package erceptor; import java.util.Map; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import mons.lang.StringUtils; import org.apache.struts2.StrutsStatics; import com.javaeye.dengyin2000.wallet.dao.UserDAO; import com.javaeye.dengyin2000.wallet.dao.UserNotFoundException; import com.javaeye.dengyin2000.wallet.domains.User; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import erceptor.AbstractInterceptor; 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 userDao; 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 = split0; String password = split1; 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(/) url = url + namespace; String actionName = invocation.getProxy().getActionName(); if (StringUtils.isNotBlank(actionName) url = url + / + actionName + .action; session.put(GOING_TO_URL_KEY, url); public UserDAO getUserDao() return userDao; public void setUserDao(UserDAO userDao) this.userDao = userDao; 首先判断session中有没有用户信息, 如果有的话继续, 如果没有的话,检查cookie中有没有rememberme的值,如果有的话,用=分割, 取得用户名密码进行登入。如果没有这个用户的话,记录下request的action地址然后转到登入页面。如果验证有这个用户,则继续下面的interceptor。 如果cookie中没有信息的话,则记录request的action地址然后转到登入页面。 以上就是LoginInterceptor的全部代码。 下面我们看看struts.xml Java代码 /login.jsp /index.jsp $goingToURL /login.jsp /login.jsp /register.jsp 我们是使用的默认的interceptor stack是loginInterceptor, 如果你需要让不登入的用户也能访问的话,你需要配置你的action使用defaultStack。 我们这里的login, register使用的就是defaultStack。 这里要注意的是success的result是我们用LoginInterceptor设过来的值。 这样我们就能够转到用户输入的起始页面。 下面我们再来看看login.jsp 和 loginAction Java代码 Wallet-Login Login Register Wallet-LoginLogin RegisterJava代码 package com.javaeye.dengyin2000.wallet.actions; import java.util.Map; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import mons.lang.StringUtils; import erceptor.CookiesAware; import erceptor.ServletRequestAware; import erceptor.ServletResponseAware; import erceptor.SessionAware; import com.javaeye.dengyin2000.wallet.dao.UserDAO; import com.javaeye.dengyin2000.wallet.dao.UserNotFoundException; import com.javaeye.dengyin2000.wallet.domains.User; import erceptor.LoginInterceptor; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport implements ServletResponseAware, ServletRequestAware, SessionAware, CookiesAware private UserDAO userDao; private String loginName; private String password; private boolean rememberMe; private HttpServletResponse response; private HttpServletRequest request; private Map session; private Map cookies; 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 loginName; public void setLoginName(String loginName) this.loginName = loginName; public String getPassword() return password; public void setPassword(String password) this.password = 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 SUCC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民族情民族魂课件
- 2025年急性中风的急救处理策略考试卷答案及解析
- 2025年口腔颌面外科术后护理要点模拟考试答案及解析
- 2025年放射治疗技术评估考试答案及解析
- 2025年药物临床药物不良反应处理答案及解析
- 2025年全科医学肺炎诊断处理流程答案及解析
- 2025年儿科医学专业技术资格考试答案及解析
- 2025年中医外科经络穴位技术操作检测试卷答案及解析
- 2025年眼科常见疾病诊断治疗技能考核测试卷答案及解析
- 中国经济新质生产力解析
- 村级财务业务知识培训课件
- 2025年特种设备检验人员资格考试(压力管道检验师GDS)历年参考题库含答案详解(5套)
- 2025年河南省公开遴选公务员考试(案例分析与对策性论文)历年参考题库含答案详解(5套)
- 2025年中药三基试题及答案大全
- 白内障囊外摘除联合青光眼人工晶体植入术后护理查房
- 药品停产管理办法
- 2025年《临床输血技术规范》
- 2025年江苏无锡离婚协议书
- 人员管理办法格式范本
- 减糖与健康口腔课件
- 北京员工待岗管理办法
评论
0/150
提交评论