Struts2 拦截器的使用,验证是否已经登陆。
第一步:编写拦截器类,继承AbstructInterceptor 重新Intercept()。
1.调用下一个拦截器或action之前做了什么。
2.调用下一个拦截器或者action。
3.调用拦截器或action之后做了什么。
代码:
- public class LoginInterceptor extends AbstractInterceptor{
-
- @Override
- public String intercept(ActionInvocation invocation) throws Exception {
- String result = "";
- System.out.println("before invoke");
-
- if(MyAction.class==invocation.getAction().getClass()){
- return invocation.invoke();
- }
-
- if(ServletActionContext.getRequest().getSession().getAttribute("username")==null){
- return "input";
- }
- result = invocation.invoke();
- System.out.println("after invoke");
- return result;
- }
第二步:在struts.xml中定义拦截器。
- <interceptors>
- <interceptor name="loginInterceptor" class="com.interceptor.LoginInterceptor"></interceptor>
- <interceptor-stack name="myStack">
- <interceptor-ref name="loginInterceptor"></interceptor-ref>
- <interceptor-ref name="defaultStack"></interceptor-ref>
- </interceptor-stack>
- </interceptors>
设置成默认的拦截器
- <default-interceptor-ref name="myStack"></default-interceptor-ref>
如果不需要设置成默认拦截器,则在具体的action中配置
- <action name="login" class="com.action.LoginAction">
- <interceptor-ref name="myStack"></interceptor-ref>
- ......
登陆提交到的action里的login()
- public String login() throws Exception {
-
- String target = "";
- if(username.equals("hsp")&&password.equals("hsp")){
- target = "success";
- this.getSession().setAttribute("username", username);
- }
- else{
- target = "input";
- }
- return target;
- }
login.jsp代码
- <body>
- <h2>登录</h2>
- <form action="myAction!login.action" method="post">
- username:<input type="text" name="username"/><br/>
- password:<input type="password" name="password"/><br/>
- <input type="submit" value="login"><br/>
- </form>
- </body>
struts.xml代码
- <action name="myAction" class="com.action.MyAction">
- <result name="success" type="redirectAction">welcom</result>
-
- </action>
- <action name="welcom">
- <result>welcom.jsp</result>
- </action>
当用户正确登陆后跳转到welcom.action。复制url再把浏览器关闭。重新打开浏览器,请求复制的url。拦截器会起作用,让页面跳转的登陆页面。