• JBOSS中使用Java验证和授权服务jaas(转载)


    使用默认安全域

    1,通过使用@SecurityDomain 注释为它指定一个安全域:

              例 :@SecurityDomain("other")
    2.通过Jboss 发布文件(jboss.xml)进行定义:
              
    例 :jboss.xml
                    <?xml version="1.0" encoding="UTF-8"?>
                   <jboss>
                              <!-- jboss默认是other,可以自定义域,方法为 编辑jboss\server\default\conf下的login-config.xml,添加新的域 -->
                              <security-domain>other</security-domain>
                              <!-- 允许匿名用户@PermitAll 注释定义的资源 -->
                              <unauthenticated-principal>AnonymousUser</unauthenticated-principal>
                  </jboss>
                 jboss.xml 必须打进Jar 文件的META-INF 目录
    以下假设使用第二中方法 (优点:便与移植)
    1.先定义users.propertes和roles.properties文件 (必须),放置与ClassPath下;
           users.propertes定义了用户名和密码,格式如下:
           user=pass
           roles.properties定义了角色
           user=Adminstrator,Guest       (多个角色用逗号分开)
           guest=Guest

    2.设置EJB的安全域
           @SecurityDomain("other")
           public class SecurityBean implements Security{}

    3.业务方法定义访问角色
           @RolesAllowed ({"Adminstrator,Guest"})              <!-- 多个角色用逗号隔开 -->
           public void someMethod(){}
           @PermitAll
           public void allowedInvoke(){}              <!-- @PermitAll 定义所有角色都能访问的方法 -->

    打包后的EJB.jar文件格式如下:
    EJB.jar
    |-com/**/*.class
    +-ejbs
    | +-Security.class
    | +-SecurityBean.class
    +-META-INF
    | +-jboss.xml
    |-users.properties
    |-roles.properties

    4.配置角色验证模块及对某些URL 进行权限设置,编辑Web应用的web.xml文件
    <!-- 下面设置以/user/开头的路径只允许DepartmentUser角色访问-->
        <security-constraint>
                  <web-resource-collection>
                                <web-resource-name>Protected Pages</web-resource-name>
                                     <url-pattern>/user/*</url-pattern>
                                     <http-method>GET</http-method>
                                     <http-method>POST</http-method>
                                 </web-resource-collection>
                                 <auth-constraint>
                                     <role-name>DepartmentUser</role-name>
                                 </auth-constraint>
                                 <user-data-constraint>
                                       <transport-guarantee>NONE</transport-guarantee>
                                 </user-data-constraint>
         </security-constraint>

         <!-- 下面设置以/admin/开头的路径只允许AdminUser角色访问 -->
         <security-constraint>
                   <web-resource-collection>
                                 <web-resource-name>Protected Pages</web-resource-name>
                                 <url-pattern>/admin/*</url-pattern>
                                 <http-method>GET</http-method>
                                 <http-method>POST</http-method>
                   </web-resource-collection>
                   <auth-constraint>
                                 <role-name>AdminUser</role-name>
                   </auth-constraint>
                   <user-data-constraint>
                                 <transport-guarantee>NONE</transport-guarantee>
                   </user-data-constraint>
          </security-constraint>

          <!-- 定义角色 -->
          <security-role>
                    <description>Authorized to access everything.</description>
                    <role-name>AdminUser</role-name>
          </security-role>
          <security-role>
                    <description>Authorized to limited access.</description>
                    <role-name>DepartmentUser</role-name>
          </security-role>
          
          <!-- 下面设置登录配置,登录验证由容器负责处理 -->
          <login-config>
                 <auth-method>FORM</auth-method>
          <form-login-config>
                 <form-login-page>/login.html</form-login-page>
                 <form-error-page>/loginFailed.html</form-error-page>
                 </form-login-config>
          </login-config>

    5.为了使用容器的安全服务,我们需要在jboss-web.xml 定义使用的安全域(例子使用other 域),该文件放置在WEB-INF 目录下
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE jboss-web PUBLIC
    "-//JBoss//DTD Web Application 2.3V2//EN"
    "http://www.jboss.org/j2ee/dtd/jboss-web_3_2.dtd">
    <jboss-web>
               <security-domain>java:/jaas/other</security-domain>
    </jboss-web>


    自定义安全域
          
     把用户名/密码及角色存放在users.propertes 和roles.properties 文件,不便于日后的管理。大多数情况下都会把用户名/密码及角色存放在数据库中
    1.定义安全域
    <!-- 身份验证:数据库登陆模块 -->
        <application-policy name="authenForDatabase">
           <authentication>
               <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
                      <!-- 数据源 -->
                      <module-option name="dsJndiName">java:/DefaultMySqlDS</module-option>
                    <!-- 通过用户名获得密码 -->
                      <module-option name="principalsQuery">select password from sys_user where name=?</module-option>
                      <!-- 通过用户名获得角色,SQL 中的'Roles'常量字段不能去掉 -->
                      <module-option name="rolesQuery">
                                     select rolename,'Roles' from sys_userrole where username=?
                    </module-option>
                    <!-- 允许匿名用户(不提供用户名及密码)访问 -->
                      <module-option name = "unauthenticatedIdentity">AnonymousUser</module-option>
               </login-module>
           </authentication>
         </application-policy>

    2.修改jboss.xml文件
         <?xml version="1.0" encoding="UTF-8"?>
        <jboss>
                 <security-domain>authenForDatabase</security-domain>
                  <unauthenticated-principal>AnonymousUser</unauthenticated-principal>
        </jboss>

    3.修改jboss-web.xml文件
        <?xml version="1.0" encoding="UTF-8"?>
         <!DOCTYPE jboss-web PUBLIC
         "-//JBoss//DTD Web Application 2.3V2//EN"
         "http://www.jboss.org/j2ee/dtd/jboss-web_3_2.dtd">
         <jboss-web>
                    <security-domain>java:/jaas/authenForDatabase</security-domain>
         </jboss-web>

    完工! ^_^

  • 相关阅读:
    SEO在网页制作中的应用
    日期控件选2016-01-01却变为2015-01-01问题
    IE8兼容placeholder的方案
    各种乱码,编码问题设置方法整理(UTF-8)
    JQuery简单实现图片轮播效果
    解决 jsp eclipse异常 【The import javax.servlet cannot be resolved】
    tomcat加载不了spring-webjar终极解决办法
    MyEclipse Web Project导入Eclipse Dynamic Web Project,无法部署到tomcat问 题
    2020-11-01助教一周总结(第九周)
    2020-10-25助教一周总结(第八周)
  • 原文地址:https://www.cnblogs.com/draem0507/p/2768215.html
Copyright © 2020-2023  润新知