`

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

    博客分类:
  • EJB
阅读更多
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.为业务方法定义角色

view plaincopy to clipboardprint?

1.       @Stateless  

2.       @Remote ({SecurityAccess.class})   

3.       public class SecurityAccessBean implements SecurityAccess{   

4.         

5.           @RolesAllowed({"AdminUser"})   

6.           public String AdminUserMethod() {     

7.               return "具有管理员角色的用户才可以访问AdminUserMethod()方法";   

8.           }   

9.         

10.        @RolesAllowed({"DepartmentUser"})   

11.        public String DepartmentUserMethod() {   

12.            return "具有事业部门角色的用户才可以访问DepartmentUserMethod()方法";   

13.        }   

14.      

15.        @PermitAll  

16.        public String AnonymousUserMethod() {   

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

18.        }   

19.      

20.    }<PRE></PRE> 

@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>example</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,...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、javamail、ejb 3的session bean、message driven bean、jpa、jax-ws 2、jaas等java ee知识,这部分知识以jsf+ejb 3+jpa整合开发为重点,通过使用netbeans ide工具...

    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的核心功能之一是用户身份验证,即...

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

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

    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开发者手册

    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消息服务、事务管理等。在这一部分中,...

Global site tag (gtag.js) - Google Analytics