技术开发 频道

Struts2下的用户权限验证问题解决方法



    【IT168 技术文档】前段时间作了一个简单的系统,其中涉及到后台管理,当然也就遇到了权限验证的问题,由于初次做J2EE项目,所有这些东西懂我来说都是个开始。
    对于权限验证,如果程序由目录划分,如管理员访问的页面都放在admin下,这样我们可以写一个权限验证的过滤器,然后配置admin目录都要经过这个过滤器即可。这样对于jsp页面的权限验证比较容易。但对于action(控制器类)就不好控制了,因为action是没有目录概念的,如我们访问action的地址为:
http://xxx/sample/ac1.action,同时如果使用http://xxx/sample/xx/xx/ac1.action同样可以访问,这是因为只要在这个项目目录下,访问的页面如果为action则struts就会去查询这个action名字对应的类,而不管前面的目录结构。因此我们不能再用过滤器对管理员部分的action进行验证。经过查看struts2的相关资料发现了拦截器这个有用的东西。通过struts2的配置文件的包管理功能和拦截器可以轻松的对指定的action做管理(拦截),如
===================================================
<package name="user" extends="struts-default"> <!-- 前台用户操作部分 --> <!-- 框架页,显示分类 --> <action name="queryCateForwardUI" class="com.topsoft.bookmanage.web.action.QueryCateForwardActionUI"> <result>/mainPage.jsp</result> </action> 。。。。。 </package> <!-- 管理员操作部分 --> <package name="manager" extends="struts-default"> <!-- 拦截器 --> <interceptors> <interceptor name="auth" class="com.topsoft.common.LogonInterceptor" /> <interceptor-stack name="authStack"> <interceptor-ref name="auth"/> <interceptor-ref name="paramsPrepareParamsStack"/> </interceptor-stack> </interceptors> <!-- 默认执行的拦截器 --> <default-interceptor-ref name="authStack"/> <!-- 全局Action映射 --> <global-results> <result name="login" type="redirect">/managerLoginUI.action</result> </global-results> <!-- 后台管理首页面UI --> <action name="managerIndexUI" class="com.topsoft.bookmanage.web.action.ManagerIndexActionUI"> <result>/admin/index.jsp</result> </action> 。。。。。。 </package> =================================================

通过使用拦截器+过滤器可以完美解决权限验证的问题。
0
相关文章