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 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办