- 【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中
- 是否有值,有证明用户已经登录,没有则为没有登录,那么就会被跳转到登陆页面。
Struts2自定义拦截器实例—只允许从登录页面进入系统
最新推荐文章于 2021-03-10 12:28:33 发布