当前位置:编程学习 > JAVA >>

我只想用Struts2 拦截器 完成用户没有登录就返回登录页面的操作

配置文件 
<struts>
<package name="worker" extends="json-default">

<!--  <interceptors> -->
<!--定义权限检查拦截器 -->
<!--  <interceptor name="userInterceptor" class="yuan.interceptor.UserInterceptor"> -->
<!--  </interceptor> -->

<!-- 定义拦截器栈 -->
<!--  <interceptor-stack name="myDefaultStack"> -->
<!-- 定义拦截器中拦截的方法 -->
<!--  <interceptor-ref name="userInterceptor"> -->
<!--  <param name="includeMethod">login</param> -->
<!--  </interceptor-ref> -->
<!--     <interceptor-ref name="defaultStack"/> -->
<!--  </interceptor-stack> -->
<!--  </interceptors> -->

<!--  <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref> -->
<!--  <global-results> -->
<!--  <result name="login">/user/login.jsp</result> -->
<!--  </global-results> -->

<action name="workerAction"  class="yuan.action.WorkerAction">
<!--  <interceptor-ref name="myDefaultStack"></interceptor-ref> -->
<result name="list"  type ="redirectAction">workerAction!findAll</result>
<result name="success" >workerList.jsp</result>
<result name="update" >workerUpdate.jsp</result>
<result name="error">error.jsp</result>
</action>


<action name="userAction"  class="yuan.action.UserAction"> 
<!--  <interceptor-ref name="myDefaultStack"></interceptor-ref> -->
<result name="login_ok" type="redirectAction">workerAction!findAll</result> 
<result name="register_ok">../user/login.jsp</result>
<result name="check" type="json">
<param name="root">ok</param>
</result>
<result name="error">../user/login.jsp</result>
</action> 


</package>
</struts>



拦截处理文件
public class UserInterceptor extends AbstractInterceptor{

@Override
public String intercept(ActionInvocation invocation) throws Exception {
//用拦截器的方法取得Session
Map map = invocation.getInvocationContext().getSession();

//判断session中是否存在用户登录的信息,如果没有就返回到登录页面
if(map.get("user") == null){
return "login";
}else{
return invocation.invoke();
}
}


}
帮我看一下那里设置的不对,需要怎么改进。谢谢。
--------------------编程问答--------------------
然后呢... --------------------编程问答--------------------
<!--                 <interceptor-stack name="myDefaultStack"> -->                     <!-- 定义拦截器中拦截的方法 --> <!--                     <interceptor-ref name="userInterceptor"> --> <!--                         <param name="includeMethod">login</param> --> <!--                     </interceptor-ref> --> <!--                       <interceptor-ref name="defaultStack"/> --> <!--                 </interceptor-stack> --> 
 

这里的 param 什么作用? --------------------编程问答-------------------- 登陆的时候有把用户加到同一个session里面么? --------------------编程问答--------------------
引用 3 楼 AA5279AA 的回复:
登陆的时候有把用户加到同一个session里面么?
加了 --------------------编程问答-------------------- 能起到拦截的作用 但是 好像每个操作都拦截 就连JS里面的操作都拦截 --------------------编程问答-------------------- 没进拦截器还是取不到值? --------------------编程问答--------------------
引用 3 楼 AA5279AA 的回复:
登陆的时候有把用户加到同一个session里面么?
定义拦截方法的时候 里面的param 中的内容有什么作用? --------------------编程问答--------------------
引用 6 楼 Bumpking 的回复:
没进拦截器还是取不到值?
用这个拦截之后 其它JS 验证什么的都不好使了 登录程序也登录不上去 --------------------编程问答--------------------
引用 4 楼 hhwyyda 的回复:
Quote: 引用 3 楼 AA5279AA 的回复:

登陆的时候有把用户加到同一个session里面么?
加了
<param name="includeMethod">login</param>这行代码 什么作用? --------------------编程问答--------------------
引用 2 楼 hhwyyda 的回复:
<!--                 <interceptor-stack name="myDefaultStack"> -->                     <!-- 定义拦截器中拦截的方法 --> <!--                     <interceptor-ref name="userInterceptor"> --> <!--                         <param name="includeMethod">login</param> --> <!--                     </interceptor-ref> --> <!--                       <interceptor-ref name="defaultStack"/> --> <!--                 </interceptor-stack> --> 
 

这里的 param 什么作用?

<interceptor-ref name="  "> 

       <param name="exculdeMethods"></param> 

       <param name="includeMethods"></param>    

</interceptor-ref> 

exculdeMethods:是不被拦截的方法,如果有多个以逗号分隔。 
includeMethods:需要被拦截的方法,如果有多个以逗号分隔。  --------------------编程问答--------------------
引用 10 楼 AA5279AA 的回复:
Quote: 引用 2 楼 hhwyyda 的回复:

<!--                 <interceptor-stack name="myDefaultStack"> -->                     <!-- 定义拦截器中拦截的方法 --> <!--                     <interceptor-ref name="userInterceptor"> --> <!--                         <param name="includeMethod">login</param> --> <!--                     </interceptor-ref> --> <!--                       <interceptor-ref name="defaultStack"/> --> <!--                 </interceptor-stack> --> 
 

这里的 param 什么作用?

<interceptor-ref name="  "> 

       <param name="exculdeMethods"></param> 

       <param name="includeMethods"></param>    

</interceptor-ref> 

exculdeMethods:是不被拦截的方法,如果有多个以逗号分隔。 
includeMethods:需要被拦截的方法,如果有多个以逗号分隔。 
完成我的功能我需要拦截什么方法? --------------------编程问答--------------------
引用 8 楼 hhwyyda 的回复:
Quote: 引用 6 楼 Bumpking 的回复:

没进拦截器还是取不到值?
用这个拦截之后 其它JS 验证什么的都不好使了 登录程序也登录不上去

这么神奇?拦截器应该不会强大到影响js验证吧?在里面打个断点看看呗,如果能进入拦截器的话
就看看session里面是不是有值,是不是成功return到指定的result里? --------------------编程问答--------------------
引用 12 楼 Bumpking 的回复:
Quote: 引用 8 楼 hhwyyda 的回复:

Quote: 引用 6 楼 Bumpking 的回复:

没进拦截器还是取不到值?
用这个拦截之后 其它JS 验证什么的都不好使了 登录程序也登录不上去

这么神奇?拦截器应该不会强大到影响js验证吧?在里面打个断点看看呗,如果能进入拦截器的话
就看看session里面是不是有值,是不是成功return到指定的result里?
拦截去肯定能进去,但是我在注册的时候 JS有失去焦点的事件  当失去焦点的时候  页面就错位了  出现了 登录界面
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,