学习笔记——JAAS

来源:互联网 发布:光大证券炒股软件 编辑:程序博客网 时间:2024/04/30 04:38

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):判断用户是否为指定角色

原创粉丝点击