Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7579585 建立时间:2006年5月29日 |

| |
[Hibernate]Acegi+hibernate 动态实现基于角色的权限管理(1) 软件技术, 电脑与网络
lhwork 发表于 2006/6/13 11:31:01 |
最近在做项目遇到了权限管理,用户要求可以自己建立不同的角色对系统的资源进行控制,
不同的用户有不同的角色,又恰恰框架中用到了struts+spring+hibernate,要求在web层调用 业务逻辑层
时不考虑权限,web层可以控制用户的显示界面,逻辑层处理用户权限问题。 想来想去好像只有spring 的aop 可以做到,在调用到
接口
中的方法时,首先检查用户的权限,如果检查通过则继续执行,否则抛出异常。但是新的问题又出现了,如何在逻辑层上来得到当前用户的id,以致用户的
角色,总不能每次都要从web中传来一个 httprequest,或者 session
这类的吧。在网上看了很多资料,发现了acegi,恰好解决了以上的难题,具体的实现原理这里就不多说了,网上有很多相关资料。 说正题,首先来看看acegi 的官方 example ,我下载的是acegi-security-1.0.0-RC1,解压缩后可以看到acegi-security-sample-contacts-filter.war,打开配置文件有这样几句 |
|
[Java Open Source]ConcurrentSession的使用(Acegi) 软件技术, 电脑与网络
lhwork 发表于 2006/6/13 11:07:30 |
Acegi可以限制同一个用户名在同一时刻成功登录同一个应用的次数。例如,你可以阻止某个用户名在已经成功登录进web应用的同时再进行一次成功的登录。当然,这个允许同时成功登录的次数你是可以自己设定的。
为支持并发(concurrent)session支持,你需要加以下代码到web.xml:
<listener> <listener-class>org.acegisecurity.ui.session.HttpSessionEventPublisher</listener-class>
|
|
[Java Open Source]Acegi简介 软件技术, 电脑与网络
lhwork 发表于 2006/6/13 10:49:03 |
Acegi安全系统,是一个用于Spring
Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean
Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。 Acegi安全系统,是一个用于Spring
Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean
Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。 安全涉及到两个不同的概念,认证和授权。前者是关于确认用户是否确实是他们所宣称的身份。授权则是关于确认用户是否有允许执行一个特定的操作。 在Acegi安全系统中,需要被认证的用户,系统或代理称为"Principal"。Acegi安全系统和其他的安全系统不 |
|
[Hibernate]Hibernate的延迟属性抓取 软件技术, 电脑与网络
lhwork 发表于 2006/6/12 15:13:11 |
再次犯了没有仔细看Hibernate Reference的错误,在Hibernate 3以上版本都支持对于property设置lazy="true",但一直我都以为只要设置了就可以实现的,今天和jindw讨论的时候才知道原来不是这样,^_^,赶快做了下试验,确实,即使对于property设置了lazy="true",但在调用获取了po中的任意非主键属性时其他所有的 property也就被加载了,也就是说lazy没有生效,到底怎么回事呢,翻阅Hibernate Reference才明白了这个问题: property (7)lazy (可选,默认为false) 指定实例变量第一次被访问时,这个属性是否延迟抓取(需要运行时字节码增强) 其实看这部分会在最后那句需要运行时字节码增强上迷糊,在hibernate reference中还有一句这样的话:“Hibernate也不需要使用任何编译期处理,比如字节码增强操作,它独立的使用Java反射机制和 |
|
[Hibernate]Hibernate获取数据方式与缓存使用 软件技术, 电脑与网络
lhwork 发表于 2006/6/12 15:08:16 |
Hibernate获取数据的方式有不同的几种,其与缓存结合使用的效果也不尽相同,而Hibernate中具体怎么使用缓存其实是我们很关心的一个问题,直接涉及到性能方面。 缓存在Hibernate中主要有三个方面:一级缓存、二级缓存和查询缓存;一级缓存在Hibernate中对应的即为session范围的缓存,也就是当 session关闭时缓存即被清除,一级缓存在Hibernate中是不可配置的部分;二级缓存在Hibernate中对应的即为 SessionFactory范围的缓存,通常来讲SessionFactory的生命周期和应用的生命周期相同,所以可以看成是进程缓存或集群缓存,二级缓存在Hibernate中是可以配置的,可以通过class-cache配置类粒度级别的缓存(class-cache在class中数据发生任何变化的情况下自动更新),同时也可通过collection-cache配置集合粒度级别的缓存(collection-cache仅在 collection中增加了元素或者删除了元素的情况下才自动更新,也就是当collection中元素发生值的变化的情况下它是不会自动更新的 |
|
[软件设计]缓存漫谈 软件技术, 电脑与网络
lhwork 发表于 2006/6/12 15:06:59 |
缓存是在提升系统响应时常用的一种技术,在我之前的blog中也提及过好几次这部分的技术,今天还是想从缓存涉及的一些方面再次的去谈谈,在系统缓存上通常采用的是有页面缓存、处理缓存和数据缓存这三种具体的类别,应该说这三种缓存在实现上还是稍有不同,尽管底层的缓存实现是一样的。 页面缓存 页面缓存是指对页面中的内容片断进行缓存的方案。比如页面中有一个部分是显示栏目中的内容的,那么就可以缓存这个部分,在进行第二次请求的时候就直接从缓存中取出这部分的内容(其实就是这部分的html了),这种情况下,缓存的作用其实非常明显,在典型的action+service+dao这样的结构中,在采用页面缓存后就意味着不需要经过action、service、dao这些层次的处理了,而是直接就返回了,对于系统响应速度的提升来说是非常明显的。 页面缓存通常采用oscache来进行实现,oscache提供了一个jsp tag,可通过这个tag来包含需要缓存的内容部分,当然,缓存的这个内容部分需要有对服务器的请求或逻辑计算等的,可想而 |
|
[Hibernate]hibernate对oracle的clob操作 软件技术, 电脑与网络
lhwork 发表于 2006/6/12 15:04:13 |
content.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="oracle.Content" table="Content"> <id name="code" column="code" type="string" length="20"> <generator class="assigned"/> </id> |
|
|