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

来源:互联网 发布:dw淘宝代码使用教程 编辑:程序博客网 时间:2024/06/06 08:57

前言


    都知道网站安全很重要,特别是网站后台。网站后台可以对网站信息进行管理,但是如果没有登录就可以直接访问管理页,那风险就大了去了。所以在进入管理页之前,一定要做登录验证,这时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执行几次,拦截器就同样执行几次。

1 0
原创粉丝点击