`
mabusyao
  • 浏览: 247705 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JBoss的安全

阅读更多
最近做了一个JBoss安全的项目,对JBoss安全的内容有了一些了解,这些了解仅限于开发阶段,在这里记录下来,免得忘记了。

照着JBoss Admin Guide关于Security的章节来写,不然太乱了。有些就直接翻译过来了。

安全在Java中具备两种意思,
1.客户端:这个应用是从哪里来的,我允许它做些什么。
2.服务端:谁在执行这个应用,我允许他做些什么。
这篇文章里面只讨论第二种情况。

安全是企业级应用的基础。作为开发人员,你需要具备控制谁被允许访问你的应用,以及应用上的何种操作被允许的能力。J2EE Spec为EJB及web组件定义了一种简单的基于role的安全模型。在JBoss中我们使用JBossSX扩展框架来处理安全。JBossSX组件支持J2EE的基于role的安全模型, 同时通过安全代理层(Security Proxy Layer),它还可以集成定制化的安全模型。JBossSX默认的声明式安全模型(基于role)是基于J2EE的JAAS(Java Authentication and Authorization Service)登陆模块的。而对于那些用声明式无法实现的安全模型,JBossSX利用安全代理层使得定制的安全模型成为可能。

1. J2EE 声明式安全

你可以将security role以及permission通过声明的方式写入标准XML描述符,并以此将安全机制与具体的业务逻辑解耦。J2EE的声明式安全正是通过这种方法来实现的,你可以将安全需求写入J2EE部署描述符(ejb-jar.xml和web.xml)。而在新的EJB和Servlet版本中,你还可以通过annotation的方式来加载。

1.1 Security References
EJB和Servlet都可以声明一到多个security-role-ref, 这个ref引用到application级别的role定义,并可以用其检验某个用户是否具备该role。
<security-role-ref>
<role-name>TheRoleICheck</role-name>
<role-link>TheApplicationRole</role-link>
</security-role-ref>


1.2 Security Identify
当某个EJB调用其他EJB时,它可以用这个标签来指明它会用哪个identify(Principal)来调用其他EJB。
<security-identity>
<use-caller-identity/>
</security-identity>


<security-identity>
<run-as>
<description>A private internal role</description>
<role-name>InternalRole</role-name>
</run-as>
</security-identity>


1.3 Security Role
定义应用级别的role,理论让应当是基于不同的domain,会有不同的role。
<assembly-descriptor>
<security-role>
<description>The single application role</description>
<role-name>TheApplicationRole</role-name>
</security-role>
</assembly-descriptor>


1.4 Method permissions
方法级别的安全验证,具有相应role的用户才能执行该方法

<method-permission>
<description>The admin role may access any method of the
EmployeeServiceAdmin bean </description>
<role-name>admin</role-name>
<method>
<ejb-name>EmployeeServiceAdmin</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>


1.5 web中的security constraint
讨论的太多了,此处不提。

2. JAAS
JBoss的JBossSX框架是基于J2EE的JAAS API,因此,想要了解JBoss的安全机制,首先要对JAAS有一定的认识。

2.1 什么是JAAS
JAAS API是由一堆java关于用户验证和授权的包组成, 它实现了一个java版本的标准可插拔的验证模块(PAM)框架,同时也支持Java 2 平台的访问控制架构来实现基于用户的授权。

2.1.1 JAAS核心类
JAAS可以分成三大块:

1. 通用类:Subject, Principal, Credential
2. 验证类:LoginContext, LoginModule, CallbackHandler, Callback
3. 授权类:Policy, AuthPermission, PrivateCredentialPermission

2.1.1.1 Subject
想要授权访问某项资源,应用程序必须首先验证request的source(用户,服务, 组件)。 在JAAS中,使用Subject类来代表一个request的source。一旦source被验证, 就会创建一个Subject对象,同时会将之与某个或多个identity相关联(Principal)。

Subject还会包含一些安全相关的属性,即Credential。Credential包括公用的和私有的,分别分开保存。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics