关闭

学习笔记——JAAS

标签: encoding应用服务器authorizationauthenticationsecurityjava
521人阅读 评论(0) 收藏 举报
分类:

Java Authentication Authorization Service(JAAS, Java认证和授权服务)

JAAS作用:解决Java EE应用的安全问题。

JAAS支持两种方式的安全性控制:声明式安全控制(declarative security),编程式安全控制(programmatic security)。

开发者可以使用XML部署表述文件或Annotation来声明安全控制,当声明式安全控制不足时,可采用编程式。

 

JAAS相关的概念

用户:通常由用户名,密码信息提供。

用户组:用户的集合。应用程序使用ACL(Access Control List)管理用户和用户组的权限。

安全域:为Web或应用程序提供的安全策略,其是包括用户、用户组的一个集合。应用服务器中最长见的安全域是:RDBMS安全域(各种信息都存储在数据库中,适合大型应用使用)、文件安全域(信息存储在文件中,适用于小型应用,用户小于1000)。

角色:一个角色一个抽象的名字,用于在应用中访问指定的资源的授权。

 

JAAS的工作流程

1:初始化请求

2:初始化认证

3:URL授权

4:完成原来的请求

5:调用EJB的方法

 

Web中的使用

声明式安全控制

使用方法:

为整个应用声明安全性角色;

指定Web中受保护的资源,并指定授权访问被保护资源的角色;

指定登入方式。

 

可在web.xml中声明,

也可以用Java EE提供了javax.annotation.security包。

e.g.

web.xml

<?xml version="1.0" encoding="GBK"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
	
		<!-- 声明安全性角色 -->
		<security-role>
			<role-name>rolename</role-name>
		</security-role>
		
		<security-constraint>
			<!-- 指定收保护的Web资源集 -->
			<web-resource-collection>
				<web-resource-name>resource</web-resource-name>	
				<url-pattern>/*</url-pattern>
				<url-pattern>/context/*</url-pattern>
				
				<!-- http-method子元素用于指定只保护指定请求方式的资源 -->
				<!--
				<http-method>GET || POST</http-method>
				-->
			</web-resource-collection>
		
			<auth-constraint>
				<!-- 访问受保护资源所需的角色 -->
				<role-name>rolename</role-name>
			</auth-constraint>
		</security-constraint>
		
		<login-config>
			<!-- 指定登录方式 BASIC:使用对话框来登录,FORM使用自定义的表单页登录 -->
			<auth-method>BASIC</auth-method>
			<realm-name>myRealm</realm-name>
			
			<!--
			<auth-method>FORM</auth-method>
			<realm-name>myRealm</realm-name>
			<form-login-config>
				<form-login-page>/login.jsp</form-login-page>
				<form-error-page>/login_fail.jsp</form-error-page>
			</form-login-config>
			-->
		</login-config>
		
</web-app>

之后该为这些角色映射到服务器的用户组上.

并且配置和管理服务器上的用户和用户组,WebLogic可以在“安全领域”中配置,JBoss需在%JBOSS_HOME%/server/default/conf/login-config.xml文件中进行管理。

 

应用服务器特定的配置文件示例:

/WEB-INF/jboss-web.xml

 

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE jboss-web PUBLIC
	"-//JBoss//DTD Web Application 5.0//EN"
	"http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd">
<jboss-web>
	<!-- 指定该Web应用使用哪个安全域(java:/jaas/是特定前缀) -->
	<security-domain>java:/jaas/rolename</security-domain>
	<context-root>basic</context-root>
</jboss-web>


/WEB-INF/weblogic.xml

 

<?xml version="1.0" encoding="GBK"?>
<weblogic-web-app>
	<!-- 将安全角色映射到服务器上的用户组 -->
	<security-role-assignment>
		<role-name>rolename</role-name>
		<principal-name>userGroup</principal-name>
	</security-role-assignment>
</weblogic-web-app


 

编程式安全控制

Web应用的编程式安全控制是通过HttpServletRequest实现的,主要使用该接口的如下3个方法:

String getRemoteUser():返回这个请求的登录用户的用户名,若未登录,则返回null;

Principal getUserPrincipal():返回登录后的身份主体,该对象包含当前用户的用户名;

bealoon isUserInRole(String role):判断用户是否为指定角色。

 

EJB中使用EJBContext来实现,该接口提供如下2个方法:

Principal getUserPrincipal():返回登录后的身份主体,该对象包含当前用户的用户名;

bealoon isUserInRole(String role):判断用户是否为指定角色

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:66272次
    • 积分:1314
    • 等级:
    • 排名:千里之外
    • 原创:54篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档