我所在的项目有几十种用户角色,每种用户角色都有不同的权限,所以权限的设计也费了很大心思,最后采取了在webwork(我们项目用的webwork)的Action配置文件里面配置权限。然后用Ant生成权限的数据库脚本,并在数据库中生成权限数据。
Action配置文件的一个Action的权限配置如下:
<action name="showCountyList" class="accountSearchController" method="doNothing" >
<!-- @Label (Show County List) -->
<!-- @Roles(ADMIN,ANALYST,ASSOCIATE_CSR,ASSOCIATE_PROGRAM_SPECIALIST,DOCUMENT_CLERK,RSM:MANAGER,MANAGERS_SUPERVISORS,MANAGER_STAFF) -->
<!-- @Description (Show County List By State Code.) -->
<result name="success" type="freemarker">
/WEB-INF/ftl/account/countyList.html
</result>
</action>
如上所示,这是我们项目中的一个Action, 配置文件中的@Roles()标识的就是哪些Role拥有调用这个Action的权限。这些Role之外的用户调用这个Action的时候就提示Permission Denied页面。
在开发过程中,开发人员根据Use case提供的权限信息来为每个Action配置权限信息。
每次部署系统的时候,配置管理员执行一个Ant target来生成权限的数据库文件,Ant target如下:
<target name="generatePermissionFiles" depends="commonReplaceLogging" description="Generate permission SQL files from configuration data.">
<echo message="Generate Action Access Permissions"/>
<!-- Delete old permission and role permission -->
<delete failonerror="false">
<fileset dir="./gen-src" includes="**/*permission.sql"/>
</delete>
<foreach list="${web.modules}" param="moduleName" target="copyConfigFiles"/>
<java classname="com.psi.vida.portal.webwork.util.ConfigurationParserRunner" fork="true">
<arg value="build/webroot/WEB-INF/classes/xwork.xml"/>
<classpath>
<path refid="test.classpath"/>
</classpath>
<jvmarg value="-Dlog4j.configuration=${basedir}/gen-src/log4j.properties"/>
</java>
<copy tofile="../resource/database/schema/PERMISSION_DATA/permissions.sql" overwrite="true">
<fileset dir="./gen-src" includes="**/permission.sql"/>
</copy>
<copy tofile="../resource/database/schema/PERMISSION_DATA/role_permissions.sql" overwrite="true">
<fileset dir="./gen-src" includes="**/role_permission.sql"/>
</copy>
</target>
如上所示,当执行这个Ant target的时候,Ant会执行一个工具类ConfigurationParserRunner来读取xwork配置文件中的权限配置,然后生成permission.sql和role_permission.sql, 每个Action就是一个权限,保存在permission表里面,每个权限对应一个Role就是Role_permission, 保存在Role_permission表里面。
一下代码是读取权限配置的主要代码:
NodeList actionNodes = pkgEl.getElementsByTagName( "action" );
if ( actionNodes != null && actionNodes.getLength() > 0 ) {
for ( int i = 0; i < actionNodes.getLength(); i++ ) {
Element actionEl = (Element) actionNodes.item( i );
ActionConfig actionConfig = parseAction( actionEl );
pkgConfig.addActionConfig( actionConfig );
if( actionConfig.getUserRoles() == null || actionConfig.getUserRoles().size() == 0 && !actionConfig.isIgnore() ) {
this.printError( "No roles for " + this.currentPackage.getNamespace() + "/" + actionConfig.getName() );
}
this.actions.put( actionConfig.getName(), actionConfig );
}
}
以上代码是读取每个Action配置,取得每个Action的user role. 根据如下的Pattern来进行匹配,代码太多就不贴了。
final static Pattern ROLE_PATTERN = Pattern.compile( ".*@Roles\\s*\\((.+)\\).*" );
以上是权限配置的实现。
当用户进入一个Action的时候,系统会先判断这个用户role是不是拥有这个Action的权限,没有的话就转向到permission denied页面。
分享到:
相关推荐
1. **Action映射**:WebWork通过XML配置文件定义了Action的映射,使得URL可以直接对应到业务逻辑的方法,增强了路由的灵活性。 2. **类型安全的参数绑定**:WebWork支持将HTTP请求参数自动绑定到Action类的属性上,...
- **src**:包含WebWork的源代码文件,对于解决使用过程中遇到的问题非常有用。 - **webapps**:提供一系列示例应用,是学习WebWork的最佳资源之一。 - **webwork-2.2.7.jar**:WebWork框架的核心类库文件。 - **...
首先,`webwork.doc`很可能是WebWork的官方文档,其中包含了框架的核心概念、API参考以及如何配置和使用WebWork的详细信息。这份文档可能涵盖了Action、Interceptors(拦截器)、ValueStack(值栈)等核心组件的介绍...
通过研究这个例子,开发者可以了解如何在Struts2项目中设置表单验证,如何使用Ant构建项目,以及如何配置Struts2的各个组件。这有助于提升对Struts2框架的理解和实战能力,对于从事Java web开发的人员来说是非常有...
这些框架在WebWork的基础上进行了优化和扩展,例如Spring MVC集成了Spring框架的强大功能,提供了一体化的开发解决方案;而Struts2则是在WebWork的基础上进行了改进,引入了更多现代Web开发的特性。 尽管如此,...
- 配置说明:Struts 2的配置包括struts.xml和struts.properties,前者定义Action映射,后者用于全局设置。 - struts.xml详解:配置Action类、结果页面、拦截器等,是Struts 2的核心配置文件。 - struts....
Struts2与Spring的结合,无疑为Java Web开发提供了一个强大而灵活的解决方案,值得我们在实际项目中深入探索和应用。 #### 12.8 参考资料 深入研究Struts2与Spring的整合,离不开官方文档、社区论坛及各类专业书籍...
XDoclet提供了一套Ant任务,使得用户可以通过编写Ant脚本来调用XDoclet进行代码和配置文件的生成。这意味着整个生成过程可以被纳入构建流程中,提高开发效率和自动化程度。 #### 五、XDoclet示例:Struts配置文件...
XDoclet可以通过你在java源代码中的一些特殊的注释信息,自动为你生成配置文件、源代码等等,例如web、ejb的部署描述文件、为你生成struts的struts-config.xml配置文件、javascript校验等。 正如《XDoclet in ...
目前的版本可以为web、ejb、struts、webwork、hibnaate、jdo、jmx等等生成描述文件、源码等,XDoclet提供了ant的任务target支持,完全通过ant来完成任务。 展开XDoclet的发布包,samples目录下有直接可以运行的...
目前的版本可以为web、ejb、struts、webwork、hibnaate、jdo、jmx等等生成描述文件、源码等,XDoclet提供了ant的任务target支持,完全通过ant来完成任务。 展开XDoclet的发布包,samples目录下有直接可以运行的...
STRUTS2结合了WebWork的优势和STRUTS1的成熟性,提供了一种灵活且强大的Web开发解决方案。它的一些关键特性包括: 1. **Action和Result**: STRUTS2的核心是Action类,它负责处理用户请求。Action类执行业务逻辑后,...
附录A介绍如何开始自己的Spring应用系统,如何下载Spring以及如何编写Ant配置文件。附录B介绍一些与Spring有关的其他开源框架。本书的每一部分既是建立在前一部分的基础上,同时也都是独立存在的,所以,读者不必...
附录A介绍如何开始自己的Spring应用系统,如何下载Spring以及如何编写Ant配置文件。附录B介绍一些与Spring有关的其他开源框架。本书的每一部分既是建立在前一部分的基础上,同时也都是独立存在的,所以,读者不必...
5. **配置文件(Configuration)**: XWork使用XML配置文件来定义动作、拦截器栈等,提供了灵活的配置能力。 6. **异常处理(Exception Handling)**: XWork提供了面向切面的异常处理机制,可以全局统一处理异常,并...
16.2协同使用spring和webwork2/struts2 16.3集成spring和tapestry 16.3.1集成spring和tapestry3 16.3.2集成spring和tapestry4 16.4协同使用spring和jsf 16.4.1解析jsf管理的属性 16.4.2解析springbean 16.4.3...
在压缩包中,有多个Struts2相关的文件,如struts2-dojo-plugin-2.1.8.jar(Struts2的Dojo插件,用于增强前端展示效果),xwork-core-2.1.6.jar(XWork是Struts2的基础,负责处理Action和业务逻辑),struts2-core-...
16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...
16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...
XDoclet 是一个通用的代码生成实用程序,是一个扩展的Javadoc Doclet引擎,它允许您使用象 JavaDoc 标记之 类的东西来向诸如类、方法...这样,我们就能在使用ant编译工程的同时,使Xdoclet为我们生成相关的配置文件了。