【问题标题】:Jboss 7 own authenticatorJboss 7 自己的验证器
【发布时间】:2014-10-29 03:39:35
【问题描述】:

我正在尝试编写自己的身份验证器,它将读取特定的自定义 cookie 并验证存储在该 cookie 中的基于用户的 od 令牌。作为一个例子,我学习了这个类:org.jboss.security.negotiation.NegotiationAuthenticator

所以我开始编写自己的验证器:

公共类 SampleAuthenticator 扩展了 AuthenticatorBase{

@Override
protected boolean authenticate(Request arg0, Response arg1, LoginConfig arg2) throws IOException {
    System.out.println("===CHECK===");
    return false;
}

如您所见,我的类只包含必须使用默认值实现的所需方法。

我已将此验证器作为模块安装在 Jboss“模块”目录中。

然后我在standalone.xml中添加了新的安全域:

<security-domain name="sso" cache-type="default">
                <authentication>
                    <login-module code="UsersRoles" flag="required" />
                </authentication>
</security-domain>

我也在standalone.xml 中将我的模块设置为全局的(在jboss 域子系统中):

<global-modules>
            <module name="com.myexample.authenticator"/>
</global-modules>

现在看来我的验证器已经可以使用了(仅用于输出字“===CHECK===”)

在我的示例 Web 应用程序中,我添加了 jboss-web.xml 描述符:

<jboss-web>
    <security-domain>sso</security-domain>
    <valve>
        <class-name>com.myexample.authenticator.SampleAuthenticator</class-name>
    </valve>
</jboss-web>

我的 web.xml 描述符如下:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>MyResourceName</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>My kinda secure web application</realm-name>
</login-config>
<security-role>
    <role-name>user</role-name>
</security-role>

最后,当我尝试部署我的 Web 应用程序时,它抛出了这个异常:

12:41:28,554 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.web.valve.myvalve: org.jboss.msc.service.StartException in service jboss.web.valve.myvalve: java.lang.ClassCastException: com.myexample.authenticator.SampleAuthenticator cannot be cast to org.apache.catalina.Valve
        at org.jboss.as.web.WebValveService.start(WebValveService.java:92)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_55]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_55]
        at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_55]
Caused by: java.lang.ClassCastException: com.myexample.authenticator.SampleAuthenticator cannot be cast to org.apache.catalina.Valve
        at org.jboss.as.web.WebValveService.start(WebValveService.java:72)
        ... 5 more

我被困在这一点上。我尝试重新实现一些身份验证器,但这个 ClassCastException 始终存在。

任何人都可以帮助我编写自己的身份验证器吗? 我正在使用 Jboss EAP 6.2 和 Jboss 7.1.1

【问题讨论】:

    标签: authentication jboss jboss7.x jboss-eap-6 authenticator


    【解决方案1】:

    问题是我使用了错误的库。问题已通过使用此 maven 依赖项解决:

    <dependency>
                <groupId>org.jboss.as</groupId>
                <artifactId>jboss-as-web</artifactId>
                <version>7.2.0.Final</version>
                <scope>provided</scope>
            </dependency>
    

    【讨论】:

      【解决方案2】:

      检查类路径,但重复部署你的类。

      如果你已经在JBoss模块中定义了autenticator,那么在war或ear中不应该有这个类

      【讨论】:

        猜你喜欢
        • 2015-09-28
        • 1970-01-01
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-10
        • 2012-02-29
        • 2012-07-27
        相关资源
        最近更新 更多