`
echohfut
  • 浏览: 231165 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts1 加入 security

阅读更多

From: http://www.onjava.com/pub/a/onjava/2004/02/18/strutssecurity.html

 

 

1. Extending the Struts ActionMapping class

 

public class StrutsPermissionMapping 
        extends ActionMapping {

    private Integer actionId = null;
    private String label = null;
    private String canBeMadeAvailable = null;
    private String canBeMadeEditable = null;
    private String group = null;
    private String role = null;

    public StrutsPermissionMapping() {
        super();
    }

    public Integer getActionId() {
        return actionId;
    }

    public void setActionId(Integer id) {
        this.actionId = id;
    }    
...
}

 

 

2. 修改后的struts-config.xml

<struts-config>
 <form-beans>
   <form-bean name="computeForm"
  	type="com.shiftat.oreilly.web.ComputeForm"/>
...
 </form-beans>
 <action-mappings> 
  <action
   path="/compute"
   type="com.shiftat.oreilly.web.ComputeAction"
   name="computeForm"
   scope="session"
   input="/jsp/compute.jsp"
   className=
    "com.shiftat.struts.StrutsPermissionMapping"
   unknown="false"
   validate="false">
   <set-property property="actionId" 
                 value="160" />
   <set-property property="label" 
                 value="compute"/>
   <set-property property="canBeMadeAvailable" 
                 value="true"/>
   <set-property property="canBeMadeEditable" 
                 value="false"/>
   <set-property property="group" 
                 value="4"/>
   <set-property property="role" 
                 value="4"/>

   <forward name="succes" 
            path="/jsp/result.jsp"
	        redirect="false"/>
  </action>
...
 </action-mappings>
</struts-config>

 

 

3.  in the login action

 

     3.1 Retrieves the user permissions from the datastore.
     3.2 Retrieves the StrutsPermissionMappings from the Struts configuration.
     3.3 Iterates over the user permissions and retrieves the corresponding StrutsPermissionMappings.
     3.4 Stores each of the corresponding StrutsPermissionMappings in a new Map in the context for that user.

Map userActionPermissionMap 
  = retrievePortalUserActionPermissionMap(userId);
Map strutsConfigMap 
  = StrutsConfigurationHelperAction
    .retrieveStrutsActionMapping(this, request);
Map userActionNamePermissionMap = new HashMap();
if (userActionPermissionMap.keySet() != null 
 && userActionPermissionMap.keySet().size() >0) {
  Iterator it 
   = userActionPermissionMap.keySet().iterator();
  while (it.hasNext()){
	Integer actionId = (Integer)it.next();
	Integer permissionId 
	 = (Integer)userActionPermissionMap
	   .get(actionId);
	StrutsPermissionMapping mapping 
	 = (StrutsPermissionMapping)strutsConfigMap
	   .get(actionId);
	String actionPath 
	   = strutsPermissionMapping.getPath();
	userActionNamePermissionMap
	   .put(actionPath, permissionId);
  }
}
context
 .setAttribute("permissionmap",
               userActionNamePermissionMap);

 

public class StrutsConfigurationHelperAction {
    
 private static SortedMap actionMappingMap = null;
 private static ModuleConfig mConfig = null;
    
 public static SortedMap 
         retrieveStrutsActionMapping(Action action, 
                     HttpServletRequest request) {
   if (actionMappingMap == null){
       actionMappingMap = new TreeMap();
       mConfig = (ModuleConfig)request.
                   getAttribute(Globals.MODULE_KEY);
       if (mConfig == null){
           mConfig = (ModuleConfig)action.
             getServlet().getServletContext().
               getAttribute(Globals.MODULE_KEY);
       }
       if (mConfig != null){
           ActionConfig[] acfg 
               = mConfig.findActionConfigs();
           for (int i=0; i < acfg.length; i++){
              ActionConfig actionConfig = acfg[i];
              if (actionConfig instanceof 
                      StrutsPermissionMapping){
                  StrutsPermissionMapping amp = 
					 (StrutsPermissionMapping)
					       actionConfig;
                   actionMappingMap
				      .put(amp.getActionId(),amp);
               } else {
                   //Regular ActionMapping 
                   //without security attributes
               }
           }
       } else {
          System.err.println
		  		("No Struts configuration !");            
       }
   }
   return actionMappingMap;
 }

}

 

4. The check that the user has the necessary permission to call a certain action in the application can easily be done in a ServletFilter

分享到:
评论

相关推荐

    struts-2.5.2 相关jar包

    Struts 2.5.2 是一个非常重要的Java Web开发框架,它基于MVC(Model-View-Controller)设计模式...开发者在使用时,需要将这些库加入到项目类路径中,然后按照Struts 2和Spring的文档进行配置,以实现两者的协同工作。

    精彩:Spring Security 演讲PPT

    1. **添加过滤器**: 在`web.xml`中加入`DelegatingFilterProxy`,用于将请求委托给Spring Security的过滤器链。 ```xml &lt;filter-name&gt;springSecurityFilterChain &lt;filter-class&gt;org.springframework.web.filter...

    spring struts hibernate 项目

    在描述中提到的网上购物商城,Struts可能会被用来处理用户浏览商品、加入购物车、结算等操作的请求,并呈现相应的页面。 接着,Hibernate是持久层框架,它简化了数据库操作,通过ORM(对象关系映射)技术将Java对象...

    ssh(struts2.3.8+spring2.5+hibernate 3)

    **Struts2** 是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它增强了Struts1的功能,提供了更灵活的控制层。Struts2.3.8版包含了对Action、Interceptor、Result和Exception处理的改进,使得开发者...

    Struts2+Spring

    例如,使用Struts2的安全插件(如Struts2 Security插件)来防止XSS、CSRF等攻击,并确保Spring的安全配置有效,避免未授权访问。 8. **测试**:在集成后,进行单元测试和集成测试是非常重要的,可以使用JUnit、...

    Struts各种问题解决方案

    - **XSS与CSRF攻击**:使用Struts2的安全插件,如Struts2-Security插件,防止XSS和CSRF攻击。 - **参数注入**:对用户输入进行校验,避免SQL注入等安全风险。 9. **版本兼容性**: - 遇到问题时,考虑更新Struts...

    struts+mvc+mssql2000的商城项目

    Struts1.x是其早期版本,通过Action和ActionForm实现业务逻辑和视图的分离,控制器DispatcherServlet负责调度请求,处理用户交互,使得应用程序结构清晰,易于维护。 二、MVC模式 MVC(Model-View-Controller)模式...

    struts+spring

    描述中提到的"需在类包中加入spring.jar和struts.jar包",这是整合前的基本步骤。确保项目类路径下包含这两个框架的核心库,Struts的struts.jar提供了MVC框架的运行时支持,而Spring的spring.jar提供了核心容器、...

    json+struts2+spring体育课选课系统

    1. JSON与Struts2的集成:通过Struts2的JSON插件,可以直接将Action的返回值转换为JSON格式,方便前端JavaScript处理。 2. Spring的安全管理:利用Spring Security实现用户的登录验证和权限控制。 3. 数据库设计:...

    struts2.3+spring3.1+hibernate3.6整合jar包

    在实际项目中,根据需求,还可以加入其他的框架或库,如MyBatis、Acegi(Spring Security前身)等,以增强系统的功能和安全性。总之,掌握Struts2、Spring和Hibernate的整合,对于Java Web开发者来说,是提升开发...

    struts2 hibernate spring整合应用案例2

    网上书店通常包括用户登录注册、浏览图书、加入购物车、结算购买等核心功能,这些功能的实现都离不开Struts2、Hibernate和Spring的协同工作。 首先,让我们来看Struts2的集成。在配置文件struts.xml中,我们需要...

    struts2.0+spring2.0+hibernate3.1 web应用

    - **简介**: Struts2 是一个基于MVC设计模式的Web框架,它是Struts1的一个重大升级,引入了许多新特性,如拦截器、动态方法调用、类型转换和验证等。 - **特点**: - 支持多种编程模型,如传统的Struts模型、...

    Struts2拦截器登录验证实例

    - 在`struts.xml`配置文件中,我们需要声明自定义的拦截器并将其加入到拦截器栈中。例如,创建一个名为`checkPrivilege`的拦截器,并将其添加到默认的`defaultStack`中。这样,每次请求Action时,`checkPrivilege`...

    Maven 搭建的简单项目

    【描述】中的“后面将加入acegi用于权限控制”指的是Acegi Security,这是一个用于Spring框架的安全组件,现在已被Spring Security替代。Spring Security提供了全面的安全服务,包括认证、授权和访问控制,确保应用...

    SSH增删改查+分页+拦截非法登录+注册登录验证

    通常,可以通过编写Spring Security或Struts2拦截器来实现这一功能。拦截器会检查用户是否已登录,如果未登录则重定向到登录页面。同时,也可以设置登录尝试次数限制,超过次数后锁定账号。 5. **注册登录验证** ...

    SSH/SSI框架

    而SSI框架则更加强调安全,Spring Security的加入使得应用在SSH基础上具备了高级的安全防护能力。 在实际开发中,SSH或SSI框架的使用通常涉及以下几个步骤: 1. **配置环境**:设置项目结构,导入所需库,配置...

    mavenSSH+Ajax2

    3. **SSH整合**:SSH通常指的是Spring、Hibernate和Struts,但在Maven SSH中,SSH更多地指代Spring Security与Maven的结合。这使得开发者能够利用Maven的自动化特性,同时享受Spring Security提供的高级安全特性。 ...

    s1sh+jbpm项目jar包

    1. **流程建模**:jbpm支持使用BPMN 2.0标准进行流程建模,提供图形化界面,让非技术人员也能理解流程图。 2. **工作流引擎**:jbpm内含强大的工作流引擎,能够解析流程定义文件,并驱动流程实例的执行。 3. **...

    SSH框架面试题.pdf

    1. **解释Struts框架及其工作原理** Struts是一个基于MVC模式的开源Web框架,用于构建动态网页应用。它通过将模型(Model)、视图(View)和控制器(Controller)分离来简化应用结构,提高可维护性和可扩展性。在...

Global site tag (gtag.js) - Google Analytics