[置顶] SSH学习——Struts2拦截器实现登录权限验证

前言


    都知道网站安全很重要,特别是网站后台。网站后台可以对网站信息进行管理,但是如果没有登录就可以直接访问管理页,那风险就大了去了。所以在进入管理页之前,一定要做登录验证,这时Struts2的拦截器就可以很好的发挥作用了。


Struts2拦截器


    拦截器是Struts2的核心,可以在Action和result进行之前或之后进行处理。它是基于AOP的原理实现的,面向切面编程使得拦截器和实现类的耦合性更低。


实现原理


拦截器是在Action提交之前,动态的拦截Action,然后查询配置文件,如果当前的Action配置了拦截器,那么就相应的实例化出拦截器对象,并串联成表,最后一个一个调用拦截器。


如何使用


1、定义拦截器


    在你的项目中创建类包,然后创建拦截器类,拦截器可以实现Interceptor接口,然后实现里面的init、destroy和intercept方法。其实最主要的是实现intercept方法,因为它是拦截器主要执行的方法。在这里是继承了MethodFileterInterceptor类,在这个类里面有一个doIntercept方法,用ActionInvocation的invoke方法来执行拦截器。执行时是判断Session中是否存在用户,如果存在表示用户已经登录,可以进入管理页;如果不存在,表示没有登录,提示并返回登录页面。


public class PrivilegeInterceptor extends MethodFilterInterceptor{

	@Override
	//执行拦截的方法
	protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
		// 判断session中是否保存了后台用户的信息
		AdminUser existAdminUser = (AdminUser)ServletActionContext.getRequest().getSession().getAttribute("existAdminUser");
		if(existAdminUser == null){
			//没有登录进行访问
			ActionSupport actionSupport = (ActionSupport)actionInvocation.getAction();
			actionSupport.addActionError("亲!您还没有登录,没有权限来访问!");
			return "loginFail";
		}else{
			//已经登录
			return actionInvocation.invoke();
		}
	}
	
}


2、在struts.xml中配置拦截器


    首先应该在配置文件中创建拦截器

<interceptors>
	<interceptor name="PrivilegeInterceptor" class="cn.itcast.shop.interceptor.PrivilegeInterceptor"/>
</interceptors>


创建好之后给Action配置拦截器


<!--后台一级分类管理的Action-->
<action name="adminCategory_*" class="adminCategoryAction" method="{1}">
	<result name="findAll">/admin/category/list.jsp</result>
	<result name="saveSuccess" type="redirectAction">adminCategory_findAll.action</result>
	<result name="deleteSuccess" type="redirectAction">adminCategory_findAll.action</result>
	<result name="editSuccess">/admin/category/edit.jsp</result>
	<result name="updateSuccess" type="redirectAction">adminCategory_findAll.action</result>
			
	<interceptor-ref name="PrivilegeInterceptor"></interceptor-ref>
	<interceptor-ref name="defaultStack"></interceptor-ref>
</action>

然后拦截器就可以执行了。


总结


1、拦截器只对Action进行处理,对其余的不进行处理。

2、拦截器可以读取值栈中的东西,就像登录验证时,拦截器可以读取Session的内容。

3、拦截器一次创建可以多次被调用,只要是使用拦截器的Action,Action执行几次,拦截器就同样执行几次。

你可能感兴趣的:([置顶] SSH学习——Struts2拦截器实现登录权限验证)