登录后跳转到最后访问URL
lijie250
2009-11-11
现在遇到一个问题,就是实现会员登录后,跳转到最后访问的访问的URL上,大家都是怎么做的?
|
|
eimhee
2009-11-12
最后访问的访问的URL放入数据库当中,或COOKIE当中,
|
|
lijie250
2009-11-12
eimhee 写道 最后访问的访问的URL放入数据库当中,或COOKIE当中,
放在数据库中这个不可取吧,我是想要具体实现方法,至于放在上面地址我有自己的方法 |
|
weibawoaini
2009-11-19
我觉得应该从cookie着手
|
|
niuky
2009-12-03
用struts拦截器拦截,在拦截器里判断是否登陆,若没登陆,则将当前地址放到一变量里转发给登陆页面,登陆页面的action接收这个值,然后登陆成功后跳转到这个页面中,或是拦截器中放到session中,不过这样不是太好。。。。
|
|
lijie250
2009-12-03
niuky 写道 用struts拦截器拦截,在拦截器里判断是否登陆,若没登陆,则将当前地址放到一变量里转发给登陆页面,登陆页面的action接收这个值,然后登陆成功后跳转到这个页面中,或是拦截器中放到session中,不过这样不是太好。。。。
这些我都知道,我要是具体方法可以获取上一个访问地址? |
|
rentianchou
2009-12-08
放到cookie里
|
|
yhailj
2010-01-06
说下我的解决方案
我一直这么觉得的, 一个好的系统, 最初的设计 很重要... 专门建一个 session 类. 需要某个字段就往这个实体里面放, 除此之外,任何地方都不要往 session 里面放东西, 最初的系统开发 Manager 就应该这么设计. 如 : public class SessionValue { /** * 用户名 */ private String userName; ... other property // setter/getter } 再建一个拦截器 : /** * 检测用户是否登录的拦截器 * * @author Yh */ public class CheckLoginInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 4776361900026731626L; /** session 中存放对象的字符串 */ public String sessionValue; /** 跳到全局登录 */ public static final String LOGIN_PAGE = "global.login"; /** 登录后的跳转 */ public static final String URL_REF = "urlRef"; public String intercept(ActionInvocation actioninvocation) throws Exception { /* 检查 session */ Object obj = actioninvocation.getInvocationContext().getSession().get(sessionValue); if (obj == null) { /* 把前一个页面的页面地址放入 session 中(有可能为空) */ String url = ServletActionContext.getRequest().getRequestURI(); /* 使用下面的方法获取的值不准确, 它会获取上一个页面的地址栏. 可以反复测试一下 */ // String url = ServletActionContext.getRequest().getHeader("referer"); actioninvocation.getInvocationContext().getSession().put(URL_REF, url); return LOGIN_PAGE; } else return actioninvocation.invoke(); } public void setSessionValue(String sessionValue){ this.sessionValue = sessionValue; } } struts.xml : <!-- 验证登录的拦截器, 其他地方继承 checklogin 即可 --> <package name="checklogin" extends="struts-default"> <interceptors> <interceptor name="cklogin" class="com.web.common.CheckLoginInterceptor"> <!-- session 中存放对象的字符串名称. 必须配置. 当然也可以在上面的类里面给一个默认值 --> <param name="sessionValue">user</param> </interceptor> <interceptor-stack name="check"> <!-- struts 2 的拦截器机制是有先后顺序的 --> <interceptor-ref name="cklogin" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="check" /> <global-results> <result name="global.login" type="redirect">login</result> </global-results> </package> <package name="main" extends="struts-default"> <action name="login"> <result>/WEB-INF/jsps/commons/login.jsp</result> </action> <!-- login.jsp 页面中的登录 --> <action name="entry" class="commonAction" method="entry"> <result name="success"> /WEB-INF/jsps/commons/loginsuccess.jsp </result> <result name="islogin" type="redirect">${url}</result> <result name="input">/WEB-INF/jsps/commons/login.jsp</result> </action> </package> <!-- 下面的代码注意分模块,像这样: --> <!-- struts 的注解功能 反倒不如配置文件直观 --> <include file="struts/struts-*.xml" /> struts-login.xml : <!-- 不需要验证登录的请求都放在这个 package 里面 --> <package name="login" extends="struts-default" namespace="/login"> </package> <!-- 需要验证的请求放在这个 package 里面 --> <package name="login-check" extends="checklogin" namespace="/login"> </package> CommonAction : public String entry() { /* 处理业务逻辑 */ UserInfo userinfo = loginService.checklogin(user); if (null == userinfo) { setMsg("<font color='red'>用户名或密码错误</font>"); return "input"; } else ActionContext.getContext().getSession().put("user", userinfo); // 登录后的跳转页面, 一旦获取到马上将其从 session 中删除 url = (String)ActionContext.getContext().getSession().get("urlRef"); ActionContext.getContext().getSession().remove("urlRef"); // 如果 url 的值为空,则跳到一个默认的地址(如首页个人空间之类的) if (isNull(url)) return "success"; return "islogin"; } |
|
lijie250
2010-01-06
很详细,谢谢,String url = ServletActionContext.getRequest().getRequestURI();
我是用的urlrewrite不知道怎么取到我的美化后的Url |
|
yhailj
2010-01-07
// 此句获取的是浏览器的地址栏. 可以都测试一下 String url = ServletActionContext.getRequest().getHeader("referer"); |