strust2拦截器--登陆

      在做OA的登陆的时候,学习了Struts2的拦截器,感觉非常的好,正好里边有一些不懂得地方,所以记录一下这段时间的所学。

        

    如上图,拦截器的工作原理其实挺简单的,就是在咱们操作每一个action之间都要经过拦截器来进行一下拦截,例如我们登陆的时候,我们如果配置了拦截器,那么就会如上图一样,框架会在你登陆之间去经过拦截器,如果我们的拦截里的代码没有通过,当然及不会去实现登陆的功能。

   如何自定义一个拦截器?

    自定义一个拦截器需要三步:

1 自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。

2 在strutx.xml中注册上一步中定义的拦截器。

3 在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。

     Interceptor接口声明了三个方法:

public interface Interceptor extends Serializable {
    void destroy();
    void init();
    String intercept(ActionInvocation invocation) throws Exception;
}

      Intercept是拦截器的主要拦截方法,如果需要调用后续的Action或者拦截器,只需要在该方法中调用invocation.invoke()方法即可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。如果不需要调用后续的方法,则返回一个String类型的对象即可,例如Action.SUCCESS。

    下边我们写一个拦截器一个Login的方法,当然我们这里因为不需要init和destory方法,所以我们就直接继承AbstractInterceptor的方法。而继承这个方法会只实现intercept方法。方法如下:

    拦截器

         public String intercept(ActionInvocation invocation) throws Exception {
		
		// 获取信息
		User user = (User) ActionContext.getContext().getSession().get("user"); // 当前登录用户
		String namespace = invocation.getProxy().getNamespace();
		String actionName = invocation.getProxy().getActionName();
		String privUrl = namespace + actionName; // 对应的权限URL

		// 如果未登录
		if (user == null) {
			if (privUrl.startsWith("/user_login")) { // "/user_loginUI", "/user_login"
				// 如果是去登录,就放行
				return invocation.invoke();
			} else {
				// 如果不是去登录,就转到登录页面
				return "loginUI";
			}
		}
		// 如果已登 录,就判断权限
		else {
			if (user.hasPrivilegeByUrl(privUrl)) {
				// 如果有权限,就放行
				return invocation.invoke();
			} else {
				// 如果没有权限,就转到提示页面
				return "noPrivilegeError";
			}
		}
	
	}
     登陆方法

	
	public String login() throws Exception {
		User user = userService.findByLoginNameAndPassworkd(model.getLoginName(),model.getPassword());
		if(user == null){
			addFieldError("login","用户名和密码不正确!");
			return "loginUI";
			
		}else{
		
			//放入session
			ActionContext.getContext().getSession().put("user", user);
			return "toIndex";
		}
		
	}
      struts2配置文件
<!-- 重新定义默认的定义拦截器栈 -->
      	<interceptors>
      		<interceptor name="checkPrivilege" class="cn.itcast.oa.util.CheckPrivilegeInterceptor"></interceptor>
      		<interceptor-stack name="defaultStack">
      			<interceptor-ref name="checkPrivilege"></interceptor-ref>
      			<interceptor-ref name="defaultStack"></interceptor-ref>
      			
      		</interceptor-stack>
      		
      	</interceptors>
    这样一个拦截器就配置好了,这样我们在执行任何Action中的方法的时候都会执行这个拦截器,例如我们每个用户登录的时候都会去判断这个用户是否有权限。

    是不是非常的简单,当然如果大家有需要的话,可以看这篇博客,总结的非常的好。

http://blog.youkuaiyun.com/struts2/article/details/1730465


评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值