Struts2自定义拦截器实例—只允许从登录页面进入系统
2014-04-01 22:23
519 查看
【1】struts.xml:
<!-- 定义一个拦截器 -->
<interceptors>
<interceptor name="authority"
class="org.interceptot.LoginInterceptor">
</interceptor>
<!-- 拦截器栈 -->
<interceptor-stack name="mydefault">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors>
<!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>
<action name="show" class="org.action.showAction">
<result name="success">/main.jsp</result>
<!-- 使用此拦截器 -->
<interceptor-ref name="mydefault" />
</action>
<!--验证登录用户信息 -->
<action name="login" class="org.action.loginAction" method="execute">
<result name="error">/login.jsp</result>
<result name="input">/login.jsp</result>
</action>
【2】自定义拦截器org.interceptot.LoginInterceptor:
package org.interceptot;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class LoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 取得请求相关的ActionContext实例
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
String user = (String) session.get("username");
// 如果没有登陆,即用户名不存在,都返回重新登陆
System.out.println("user:"+user);
if (user != null) {
System.out.println("test");
return invocation.invoke();
}
System.out.println("你还没有登录");
ctx.put("tip", "你还没有登录");
return Action.LOGIN; //返回一个叫login的result结果
}
}
【3】进入主页面的Action:org.action.showAction
package org.action;
import com.opensymphony.xwork2.ActionSupport;
public class showAction extends ActionSupport {
public String execute() {
return "success";
}
}
【4】LoginAction:
private boolean isInvalid(String value) {
return (value == null || value.length() == 0);
}
if (isInvalid(user.getUsername()))
return INPUT;
if (isInvalid(user.getPassword()))
return INPUT;
//登录成功将User放入session中
HttpServletRequest request = ServletActionContext.getRequest();
Map map=ActionContext.getContext().getSession();
map.put("username", user.getUsername());
【5】如果我们通过show.action访问main.jsp那么就会被自定义拦截器拦住,拦截器检查session中
是否有值,有证明用户已经登录,没有则为没有登录,那么就会被跳转到登陆页面。
<!-- 定义一个拦截器 -->
<interceptors>
<interceptor name="authority"
class="org.interceptot.LoginInterceptor">
</interceptor>
<!-- 拦截器栈 -->
<interceptor-stack name="mydefault">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors>
<!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>
<action name="show" class="org.action.showAction">
<result name="success">/main.jsp</result>
<!-- 使用此拦截器 -->
<interceptor-ref name="mydefault" />
</action>
<!--验证登录用户信息 -->
<action name="login" class="org.action.loginAction" method="execute">
<result name="error">/login.jsp</result>
<result name="input">/login.jsp</result>
</action>
【2】自定义拦截器org.interceptot.LoginInterceptor:
package org.interceptot;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class LoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 取得请求相关的ActionContext实例
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
String user = (String) session.get("username");
// 如果没有登陆,即用户名不存在,都返回重新登陆
System.out.println("user:"+user);
if (user != null) {
System.out.println("test");
return invocation.invoke();
}
System.out.println("你还没有登录");
ctx.put("tip", "你还没有登录");
return Action.LOGIN; //返回一个叫login的result结果
}
}
【3】进入主页面的Action:org.action.showAction
package org.action;
import com.opensymphony.xwork2.ActionSupport;
public class showAction extends ActionSupport {
public String execute() {
return "success";
}
}
【4】LoginAction:
private boolean isInvalid(String value) {
return (value == null || value.length() == 0);
}
if (isInvalid(user.getUsername()))
return INPUT;
if (isInvalid(user.getPassword()))
return INPUT;
//登录成功将User放入session中
HttpServletRequest request = ServletActionContext.getRequest();
Map map=ActionContext.getContext().getSession();
map.put("username", user.getUsername());
【5】如果我们通过show.action访问main.jsp那么就会被自定义拦截器拦住,拦截器检查session中
是否有值,有证明用户已经登录,没有则为没有登录,那么就会被跳转到登陆页面。
相关文章推荐
- Struts2自定义拦截器实例—只允许从登录页面进入系统
- Struts2透过自定义拦截器实现登录之后跳转到原页面
- Struts2通过自定义拦截器实现登录之后跳转到原页面
- Struts2自定义拦截器(实现没有登录情况下只能访问登录页面)
- dwz ajax session超时跳转登录页(struts2自定义拦截器)
- Struts2自定义拦截器实例—登陆权限验证
- struts2 之配置拦截器使网站页面在session失效后退回到登录页面
- Struts2拦截器登录验证实例
- Struts2 自定义拦截器实例—登陆权限验证
- Struts2自定义拦截器:登录拦截
- struts2--拦截器(非登录用户不可跳转至该页面)
- Struts2自定义拦截器实例—登陆权限验证
- Struts2 自定义拦截器实例—登陆权限验证
- Struts2自定义拦截器实例—登陆权限验证+验证框架
- Struts2自定义拦截器实例—登陆权限验证
- Struts2自定义拦截器实例—登陆权限验证
- Struts2自定义拦截器验证登录
- Struts2自定义登录验证拦截器
- Struts2自定义拦截器——完整实例代码
- Struts2自定义拦截器实例—登陆权限验证