`

Jboss+EJB3下使用JAVA验证和授权服务(JAAS)

阅读更多
JAVA验证和授权服务(JAAS).JAAS具有两个特性:验证(Authentication)和授权(authorization),认证是完成用户名和密码的匹配校验;授权是决定用户可以访问哪些资源,授权是基于角色的.
一.基于属性的JAAS
1.定义用户和角色:       
   Jboss 默认的安全域”other”, “other”安全域告诉容器到classpath 中的users.propertes 和roles.properties找密码和用户角色列表。”other”安全域的定义在[jboss 安装目录]/server/default/conf/login-config.xml 文件。
       这两个文件必须存放于类路径下。在进行用户验证时,Jboss 容器会自动寻找这两个文件。
        “other”安全域默认情况下是不允许匿名用户(不提供用户名及密码)访问的,如果你想使匿名用户也可访问通过@PermitAll 注释定义的资源,这样就不用修改login-config.xml文件.
2.定义安全域      

第一种方法:通过Jboss 发布文件(jboss.xml)进行定义
<?xml version="1.0" encoding="UTF-8"?>
   <jboss>
      <security-domain>other</security-domain>
      <unauthenticated-principal>AnonymousUser</unauthenticated-principal>
   </jboss>

jboss.xml 必须打进Jar 文件的META-INF 目录。

第二种方法:通过@SecurityDomain 注释进行定义,注释代码片断如下
@Stateless
@Remote ({SecurityAccess.class})
@SecurityDomain("other")   //通过注释定义为other,硬写在程序中,这样不便于维护,一般不提倡这样做.
public class SecurityAccessBean implements SecurityAccess{..........


3.为业务方法定义角色


@Stateless   
@Remote ({SecurityAccess.class})    
public class SecurityAccessBean implements SecurityAccess{    
   
    @RolesAllowed({"AdminUser"})    
    public String AdminUserMethod() {      
        return "具有管理员角色的用户才可以访问AdminUserMethod()方法";    
    }    
   
    @RolesAllowed({"DepartmentUser"})    
    public String DepartmentUserMethod() {    
        return "具有事业部门角色的用户才可以访问DepartmentUserMethod()方法";    
    }    
   
    @PermitAll   
    public String AnonymousUserMethod() {    
        return "任何角色的用户都可以访问AnonymousUserMethod()方法, 注:用户必须存在users.properties文件哦";    
    }    
   
} 


@Stateless
@Remote ({SecurityAccess.class})
public class SecurityAccessBean implements SecurityAccess{

    @RolesAllowed({"AdminUser"})
    public String AdminUserMethod() {  
        return "具有管理员角色的用户才可以访问AdminUserMethod()方法";
    }

    @RolesAllowed({"DepartmentUser"})
    public String DepartmentUserMethod() {
        return "具有事业部门角色的用户才可以访问DepartmentUserMethod()方法";
    }

    @PermitAll
    public String AnonymousUserMethod() {
        return "任何角色的用户都可以访问AnonymousUserMethod()方法, 注:用户必须存在users.properties文件哦";
    }

}


@RolesAllowed 注释定义允许访问方法的角色列表,如角色为多个,可以用逗号分隔。@PermitAll 注释定义所有的角色都可以访问此方法。

4.测试:
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="com.SecurityAccess,javax.naming.*,org.jboss.security.*,java.util.*"%>

<%Properties props = new Properties();
 props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
InitialContext ctx = new InitialContext(props);
String user = request.getParameter("user");
String pwd = request.getParameter("pwd");
if (user!=null && !"".equals(user.trim())){
  SecurityAssociation.setPrincipal(new SimplePrincipal(user.trim()));
  SecurityAssociation.setCredential(pwd.trim().toCharArray());
}
SecurityAccess securityaccess = (SecurityAccess)ctx.lookup("SecurityAccessBean/remote");
try{
    out.println("<font color=green>调用结果:</font>"+securityaccess.AdminUserMethod()+ "<br>");
}catch(Exception e){
  out.println(user+ "没有权限访问AdminUserMethod方法<BR>");
}

out.println("==========================<BR>");
 try{
   out.println("<font color=green>调用结果:</font>"+securityaccess.DepartmentUserMethod()+ "<br>");
 }catch(Exception e){
   out.println(user+ "没有权限访问DepartmentUserMethod方法<BR>");
}

out.println("==========================<BR>");
try{
  out.println("<font color=green>调用结果:</font>"+securityaccess.AnonymousUserMethod()+ "<br>");
}catch(Exception e){
    out.println(user+ "没有权限访问AnonymousUserMethod方法<BR>");
}

SecurityAssociation.clear();%>





<html>
 <head><title>安全访问测试</title></head>
 <body>
  <center><h2>安全访问测试</h2></center><br />
   请输入你的用户名及密码<br /><form method="POST" action="SecurityAccessTest.jsp">
   Username: <input type="text" /><br />
   Password: <input type="password" /><br />
   <input type="submit" value="身份验证"/>
  </form>

<p>管理员用户名: <STRONG>lihuoming</STRONG>&nbsp;&nbsp;密码: <STRONG>123456</STRONG></p>
<p>事业部用户名: <STRONG>zhangfeng</STRONG>&nbsp;&nbsp;密码<STRONG>111111</STRONG></p>
<p>合作伙伴用户名: <STRONG>wuxiao</STRONG>&nbsp;&nbsp;密码<STRONG>123</STRONG></p></body></html>



二.基于DB的JAAS
1.定义安全域:       

安全域在[jboss 安装目录]/server/default/conf/login-config.xml 文件中新增加一个定义,本例配置片断如下:

<application-policy >
  <authentication>
   <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule"  flag="required"> 
    <module-option >java:/MySqlDS</module-option>
    <module-option >  select password from sys_user where >  </module-option>
    <module-option >   select A.rolename,'Roles' from sys_userrole  as  A, sys_user  B   where B.name=A.username and username=?  </module-option>
    <module-option >AnonymousUser</module-option>
  </login-module>
 </authentication>
 </application-policy>



注意:principalsQuery 属性定义Jboss 通过给定的用户名如何获得密码;rolesQuery 属性定义Jboss通过给定的用户名如何获得角色列表,注意:SQL 中的'Roles'常量字段不能去掉,将在查询的记录中都加上Roles字符串.有些书上,这个sql语句是错误的

2.自定义安全域使用的sys_user 和sys_userrole 表:

CREATE TABLE `sys_user` (
`name` varchar(45) NOT NULL,
`password` varchar(45) NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

CREATE TABLE `sys_userrole` (
`username` varchar(45) NOT NULL,
`rolename` varchar(45) NOT NULL,
PRIMARY KEY (`username`,`rolename`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;


3.修改jboss.xml ,改为所定义的新安全域


<?xml version="1.0" encoding="UTF-8"?>
 <jboss>
  <security-domain>youname</security-domain>
  <unauthenticated-principal>AnonymousUser</unauthenticated-principal>
 </jboss> 


分享到:
评论

相关推荐

    jboss7 + EJB3

    总的来说,JBOSS7.1.1 Final与EJB3的结合,为开发者提供了强大且灵活的企业级应用开发环境,简化了部署流程,同时提供了丰富的服务和组件,以满足复杂的企业需求。通过深入理解和实践,开发者可以充分利用这一平台的...

    JBoss4.2.3GA + EJB3.0 + JAAS

    JAAS是Java平台的认证和授权服务,它提供了一种标准的方式,用于实现应用程序的安全策略。开发者可以通过JAAS定义用户身份验证机制和权限控制,确保只有经过验证的用户才能访问受保护的资源。在JBoss中,JAAS被用来...

    jboss ejb 3.zip

    3. **安全性**:集成JAAS(Java Authentication and Authorization Service),实现用户身份验证和权限控制。 4. **部署**:通过XML或注解进行部署描述,简化部署过程。 5. **热部署**:在运行时可以更新Bean,...

    struts1.1+ejb模拟项目

    8. **安全控制**:理解如何使用JAAS(Java Authentication and Authorization Service)和EJB的安全特性来实现用户认证和授权。 9. **性能优化**:探讨如何调整Struts和EJB的配置以提升系统性能,如缓存策略、连接...

    JBoss+4+Application+Server+Guide

    《JBoss 4 应用服务器指南》是针对JBoss Application Server 4.0.1版本的一本详尽教程,旨在帮助用户理解和掌握这个开源Java应用服务器的使用和管理。JBoss AS是一款基于Java EE(Java Platform, Enterprise Edition...

    jboss-4.2.3.GA-jdk6的EJB服务器

    在这个版本中,部署EJB可以通过编辑部署描述符文件(如ejb-jar.xml)或者使用jboss-as-deployments目录下的jar或ear文件进行热部署。管理工具如JMX Console或命令行接口(CLI)可用于监控和管理运行时的EJB服务。 ...

    EJB JBOSS

    - **XML配置**:如`jboss-ejb3.xml`和`ejb-jar.xml`文件用于配置EJB的属性。 - **管理工具**:JBOSS提供的管理控制台或CLI(Command Line Interface)允许开发者远程监控和管理应用服务器。 - **热部署**:JBOSS...

    JBOSS security using JAAS

    Java Authentication and Authorization Service (JAAS) 是Java平台上用于处理用户认证和授权的服务框架,它为JBOS提供了核心的安全管理机制。 1. **JAAS基础** - **认证**:JAAS的核心功能之一是用户身份验证,即...

    JBoss4.0中文版.pdf

    【JBoss4.0中文版.pdf】是一本详细介绍JBoss应用服务器4.0版本的中文教程,涵盖了从基础到高级的各类主题,旨在帮助读者快速掌握JBoss的使用和管理。该书的主要内容可能包括以下几个方面: 1. **JBoss简介**:JBoss...

    jboss-4.0.5.GA.zip

    8. **安全管理**:具备用户认证和授权功能,支持JAAS(Java Authentication and Authorization Service),可实现基于角色的访问控制。 9. **热部署**:允许开发者在不中断服务的情况下更新部署的应用,提高了开发...

    JBOSS中文文档 CSDN资源下载

    5. **安全管理**:JBoss的安全特性包括用户角色、认证和授权。这部分会讲解如何设置用户、角色,以及如何使用JaAS(Java Authentication and Authorization Service)来保护应用。 6. **事务管理**:JBoss支持JTA...

    jboss-4.2.3.GA_下的jboss-4.2.3.GA_下的

    5. **安全管理**:基于JAAS(Java Authentication and Authorization Service)的认证和授权系统,可以灵活地配置用户权限。 6. **热部署**:允许开发者在运行时更改和更新应用程序,而无需停止服务器。 7. **模块...

    Jboss开发者手册

    JBoss是一款开源的Java EE应用服务器,它提供了全面的支持来实现企业级的服务和组件模型。本手册将深入解析JBoss的核心功能和最佳实践。 1. **JBoss简介** JBoss是Red Hat公司旗下的产品,基于Java平台,用于运行...

    EJB实现了简单的登陆页面

    在JDK5.0及Jboss1.5环境下运行,我们可以推断出这个项目使用的是EJB 3.0规范,因为EJB 3.0是与Java EE 5一起推出的,而Jboss 1.5支持Java EE 5标准。EJB 3.0引入了重大改进,包括更少的XML配置、注解驱动的开发和...

    jboss 服务应用

    JBoss 的热部署功能允许开发者在不中断服务的情况下更新应用程序,提高了开发效率和生产环境的稳定性。 5. **集群与高可用性** JBoss 可以配置为集群,实现负载均衡和故障转移,提升系统的可用性和性能。 6. **...

    jboss3 快速入门

    本节详细介绍了如何配置jBoss的安全服务,包括使用JAAS进行认证和授权。 ##### 8.2 Securing Your Application 进一步探讨了如何保护应用程序免受攻击,包括权限控制、身份验证策略等。 #### 九、CMP 2.0 CMP ...

    JBOSS开发人员指南

    JBoss提供了多种安全模型,包括角色基安全、认证和授权等,开发者应熟悉如何配置用户、角色和权限,以保护应用程序的安全。 6.2 JAAS集成 Java Authentication and Authorization Service (JAAS) 是Java平台的标准...

    jboss5服务器2

    作为一个强大的Java Web容器,它提供了对多种企业级服务的支持,如EJB3、JMS、JPA、JSF等,是开发和部署Java应用的重要平台。在本篇中,我们将深入探讨JBoss5的核心特性、配置以及在分布式环境中的应用。 1. **核心...

    Jboss5源代码-官方-第二部分

    JBoss5是JBoss企业应用平台(JBoss Enterprise Application Platform)的一个重要版本,它基于Java EE 5规范,为开发者提供了全面的中间件服务,包括Web服务器、EJB容器、JMS消息服务、事务管理等。在这一部分中,...

    JBoss架构分析

    JBoss是一款基于LGPL许可的开源J2EE(Java 2 Platform, Enterprise Edition)实现平台,提供了完整的EJB(Enterprise JavaBeans)容器及一系列EJB服务。这些服务包括但不限于数据库访问(JDBC)、事务管理(JTA/JTS...

Global site tag (gtag.js) - Google Analytics