dcs206 2016-05-16 03:27 采纳率: 0%
浏览 1210

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里面的内容

  • 写回答

1条回答

  • 普通网友 2016-10-07 17:07
    关注

    拦截登录问题
    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";
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作