struts2的拦截器,如何做到正常表单提交不拦截,直接访问要拦截呢?

凌空寻宇 2015-09-15 11:47:59
我先说一下的我的页面制作思路:
首先是两个页面:登录页面和成功页面。登录页面通过提交表单的action跳到成功页面。

<form action="login">
姓名<input type="text" name="user.name"/><br />
密码<input type="password" name="user.password"/><br />
<input type="submit" value="提交" />
</form>


然后在struts.xml里配置:

<action name="login" class="tutorial.Login">
<result>/loginSuccess.jsp</result>
</action>

在Login.java中将用户名和密码放入session中,然后转到loginSuccess.jsp页面

然后为了防止用户直接访问 /login.action,所以给这个action配置了一个拦截器:

<interceptors>
<interceptor name="loginInterceptor" class="tutorial.CheckLoginInterceptor">
</interceptor>
<interceptor-stack name="myDefaultStack">
<interceptor-ref name="loginInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>

<action name="login" class="tutorial.Login">
<result name="login">/loginForm.jsp</result>
<result name="success">/loginSuccess.jsp</result>
<interceptor-ref name="myDefaultStack" />
</action>


在CheckLoginInterceptor中判断session中是否有用户名和密码,若有则返回success,否则返回“login”

然后这就出问题了。
因为正常的表单提交也会调用这个action,因此也会触发拦截器。而将信息放入session的方法在拦截器之后才执行,因此正常登录也无法执行了。

我想了很久也没想出解决办法,因此想问一下,要在哪些文件中怎么写才能做到:正常表单提交不拦截,直接访问要拦截呢?
...全文
113 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ab637800 2015-09-15
正常表单提交不拦截,直接访问要拦截呢? 意思就是登录了提交表单不拦截,不登录直接访问就拦截吧。 因为正常的表单提交也会调用这个action,因此也会触发拦截器。而将信息放入session的方法在拦截器之后才执行,因此正常登录也无法执行了。 这句话 你设置拦截器不对登录的拦截器起作用不就行了。 例如我写了一个拦截器 这样配置 <interceptors> <interceptor name="sessionNull" class="com.Interceptor.SessionNullIntercePer"> </interceptor> </interceptors> <global-results> <result name="login" type="redirect">/Login.html</result> </global-results> 我让拦截器对一个action的方法起作用 <action name="getALLClientUser" class="clientUserAction" method="getALLClientUser"> <interceptor-ref name="sessionNull"></interceptor-ref> <interceptor-ref name="defaultStack"/> </action> 我让拦截器对登录不起作用,直接不引用就行了 <action name="loginTXZ" class="UserAction" method="loginTXZ"></action>
回复
凌空寻宇 2015-09-15
引用 1 楼 ab637800 的回复:
正常表单提交不拦截,直接访问要拦截呢? 意思就是登录了提交表单不拦截,不登录直接访问就拦截吧。
提交表单指的是登录这个行为本身,不是登陆了再提交表单。
引用 1 楼 ab637800 的回复:
我让拦截器对登录不起作用,直接不引用就行了 <action name="loginTXZ" class="UserAction" method="loginTXZ"></action>
但是登录和直接访问调用的是同一个action,如果这个action不设拦截器,那就可以通过url直接访问了;如果设了拦截器,那么正常登录也会被拦截。
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-09-15 11:47
社区公告
暂无公告