问题描述
- struts实现拦截登录问题
-
ajax提交数据到后台---》struts分配请求映射到具体的action--》action返回result json字符串并且设置session--》ajax的success解析json 成功就跳转到拦截action去获取session--》用户名密码正确就返回“login”跳转到main.html的路径这里可以实现跳转。。。但是以上的流程在拦截器里面获取不到session,但是我自己写一个简单的跳转action到具体页面后,在去进入这个action方法是可以获取到这个session 的
请问各位大神,我这样实现这个拦截有什么问题吗,还是session 的设置必须是完成一个完整的会话,我想不经过拦截器直接跳转到action,但是这样不是和直接访问一个jsp资源是一样的吗,拦截器不就没啥用处了吗大神来解答解答。。。
login.java
if(password.equals(user.getPwd())){
ActionContext.getContext().getSession().put("userName", userName);
ActionContext.getContext().getSession().put("passWord", password);
map.put("result", "success");
JSONObject json = JSONObject.fromObject(map);
result=json.toString();
System.out.println("成功返回数据");
return "success";
}ajax的success var result = d.result; //返回success则自动跳转到主界面 if (result == "success") { location.href = "login"; } } srtuts的跳转 <package name="" namespace="/" extends="default"> <action name="login" class="com.zjm.interceptor.testLogin"> <interceptor-ref name="sessionCheckStack"/> </action> 拦截器 <global-results> <!-- 配置tocken的invalid.tocken的返回试图,即当页面重复提交,页面将自动转到error.jsp --> <result name="invalid.token">/error.jsp</result> <result name="backhome" type="redirectAction">IndexAction</result> <result name="login">/WEB-INF/main.html</result> <result name="noLogin">/login.html</result> </global-results> 拦截器内获取session代码 String userName=(String)session.get("userName"); String passWord=(String)session.get("passWord"); System.out.println(userName+" "+passWord); if(userName!=null&&passWord!=null){ User user=sysUserService.findOneUser(userName); String result=user!=null?(passWord.equals(user.getPwd())?Action.LOGIN:"noLogin"):"noLogin"; return result; }
这一套流程下来输出的session为null
我简单写了一个action跳转到一个空页面,在action里面设置了sessio,在成功跳转到一个页面以后再去调用这个拦截器里面的方法是可以输出这个session里面的内容