今天主要实现的是员工信息的修改和权限管理基础,修改用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 阅读(449)
评论(0) 编辑 收藏