




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东中考卷数学试卷
- 建筑外墙清洁维护协议条款
- 杭州教师考试数学试卷
- 冀教版期中数学试卷
- 农业生产合作联盟发展协议
- 迎新春系列活动方案
- 个人信贷平台借款合同
- 母校情最真300字15篇
- 低碳环保主题活动方案
- 幼儿园小班教学工作方案报告
- (浙江)现场流行病学调查职业技能竞赛备考试题库(含答案)
- 设立工业设计公司商业计划书
- 0到三岁日常保健知识讲座
- 2024年贵州水投水务集团有限公司招聘笔试参考题库含答案解析
- 辣椒种植和养护知识讲座
- 空中交通管理基础-电子课件 第一章概论
- 养老护理员睡眠照料课件
- 建设工程质量检测中心检测范围及标准
- 中建住宅二次结构专项施工方案
- (译林版)六年级英语完形填空100篇(含答案和讲解)
- 全国优质课一等奖中等职业学校公共艺术(音乐)教师微课堂比赛《春节序曲》微课展示课件
评论
0/150
提交评论