随笔-54  评论-0  文章-2  trackbacks-0

  

今天主要实现的是员工信息的修改和权限管理基础,修改用AJAX实现的,权限看了不少的源代码,感觉蛮难的,不过今天只是初步介绍,还有时间再学习一下!

 

1.员工信息的修改

 1.struts对表单信息的回显

 2.对可以进行修改的字段

1.当该字段值发生改变时,confirm”确定修改该信息吗?

   点击取消:使该字段恢复为以前的默认值,不做改变,需要使用隐藏域

        

 点击“确定”:用AJAX改变字段,在配置文件中不需返回任何信息                              

   <script type=”text/javascript”>

    $(function(){

     $(“:text,select”).change(function(){

       var flag = confirm(“确定要修改” + $(this).prev(“label”).text()+”信息吗?”);

        ...

});

}):

</script>

信息

2.集成spring-security 框架

 1. Spring Security 能用 于保护各种 Java 应 用程序(权限管理框架).

 2.spring-security入门

   需 求:1. Spring-security 应用的根目录下有两个 Jsp 页面: index.jsp admin.jsp. admin 用户有权限访问这两个页面, user 用户只能访问 index.jsp

2.提供”登出”功能

   搭建环境:

      首先添加spring环境

1.加入spring-security jar 包:

spring-security-2.0.5"dist"spring-security-core-2.0.5.RELEASE.jar

2.web.xml 文件中加入加入spring-security 框架的过滤器

3.新建applicationContext-security.xml 配置文件,并且把security 作为默认的命名

空间, 并将其导入到applicationContext.xml

applicationContext-security.xml,有几种重要配置:

1. 配置 spring-security http 安全属性   

       <http auto-config="true">

       2. 配置需要保护那些 资源, 以及访问这些资源 所需要的权限, 若有多个 权限使用 ',' 分隔   

              <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN"/>

              <intercept-url pattern="/index-1.jsp" access="ROLE_USER"/>

       3.配置登出服务   

              <logout logout-url="/logout"

                     logout-success-url="/loguot-success.jsp"

                     invalidate-session="false" />

       4.配置登录页面,

                     default-target-url: 若直接请求登录页面, 那么该属性配置登录成功之后的相应页面  

                     always-use-default-target: 若请求的目标页面受保护, spring-security 会相应 login-page 属性对应的页面, 默认情况下, 若登录成功将相应刚才请求的目标页面,

但这相当麻烦,每次都要配置不少信息。下面 有更好的实现,即

把需要拦截的url,权限,用户信息放到放数据库中,实现如下:

1.实体类:

Authority -- 权限

Resource -- 资源

Role -- 角色

Employee -- 添加Set<Role> roleSet 属性

2.关系

Resource Authority 为多对多的对应关系

Authority Role 为多对多的对应关系

Role Employee 为多对多的对应关系

所以还需要3 个额外的关联表


3.实现把用户信息,权限信息存放到数据库中

  1. 实现把用户信息, 权限信息存放到数据库中

       1). 自定义 UserDetailsService 接口的实现类, 将该类配置到 Spring IOC 容器中, 并在

           <authentication-provider user-service-ref=""> 节点的 user-service-ref 属性中引用该 Bean.

       2). 通过 debug 查看 UserDetailsService 接口的实现类返回的 UserDetails 对象     

4. 实现资源信息存放到数据库中: 访问资源时, spring-security 能区分出访问该资源需要哪些权限

       1). 自定义 ObjectDefinitionSource 接口的实现类, 将该类的实例装配给 FilterSecurityInterceptor objectDefinitionSource 的 属性.即可实现自定义的资 源获取.

       2). 通过继承 DefaultFilterInvocationDefinitionSource 类的方法定义    ObjectDefinitionSource 接口的实现类有困难, 因为 DefaultFilterInvocationDefinitionSource

                  中没有无参的构 造器, 该构造器有两个参 数: UrlMatcher urlMatcher, LinkedHashMap requestMap.

           urlMatcher 参数可 以通过 bean 的形式 事先配置, requestMap 参数类似于: {[/admin.jsp]=[ROLE_ADMIN], [/index.jsp]=[ROLE_USER]}, 需要访问数据库才能对其初始化, 但这不可能.

       3). 通过查看 spring-security 核心 jar 包的 META-IN spring.handlers 找到 SecurityNamespaceHandler, 在该类中查看 registerBeanDefinitionParser(Elements.HTTP, new HttpSecurityBeanDefinitionParser()); 方法

                 HttpSecurityBeanDefinitionParser 类 中可以看到如何创建 DefaultFilterInvocationDefinitionSource 实例.

       4). 通过 FactoryBean IOC 容器中注册 DefaultFilterInvocationDefinitionSource 实例        

 


posted on 2010-03-10 01:00 d66380022 阅读(440) 评论(0)  编辑  收藏