PicketBox EJB Аутентификация в пользовательском интерфейсе Wicket - PullRequest
1 голос
/ 04 ноября 2011

Я использую EJB (на JBoss) и Wicket в качестве слоя пользовательского интерфейса.Я добавил безопасность в свой EJB, мой security.conf выглядит следующим образом:

<application-policy name="my-security-domain">
    <authentication>
        <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required">
            <module-option name="usersProperties">META-INF/users.properties</module-option>
            <module-option name="rolesProperties">META-INF/roles.properties</module-option>
        </login-module>
    </authentication>
</application-policy>

На уровне пользовательского интерфейса я использую PicketBox для аутентификации в соответствии с инструкциями на странице аутентификации PicketBox: http://community.jboss.org/wiki/PicketBoxAuthentication#PicketBox_Authentication_in_a_JBoss_Application_Server_5_environment

Подкласс My Wicket AuthenticatedWebSession выглядит следующим образом:

private Subject subject;
private SecurityContext securityContext;

@Override
public boolean authenticate(String username,
                            String password)
{
    boolean authenticated = false;
    securityContext = null;
    SecurityFactory.prepare();

    try
    {
        String                 securityDomainName = "my-security-domain";
        String                 configFile         = "META-INF/security.conf";
        PicketBoxConfiguration idtrustConfig      = new PicketBoxConfiguration();
        idtrustConfig.load(configFile);

        //Note: This is the most important line where you establish a security context
        securityContext = SecurityFactory.establishSecurityContext(securityDomainName);
        AuthenticationManager am = securityContext.getAuthenticationManager();
        subject = new Subject();

        Principal principal  = new SimplePrincipal(username);
        Object    credential = new String(password);
        authenticated = am.isValid(principal, credential, subject);

        securityContext.getUtil().createSubjectInfo(principal, credential, subject);
        //You may make call outs to other components here*/

        //DEBUG
        for(Principal p : subject.getPrincipals())
        {
            LOGGER.debug("Principal: " + p.getName());
            if(p instanceof Group)
            {
                Group                            g       = (Group) p;
                Enumeration<? extends Principal> members = g.members();
                while(members.hasMoreElements())
                {
                    Principal member = members.nextElement();
                    LOGGER.debug("Group name: " + member.getName());
                }
            }
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

    return authenticated;
}

Пока все хорошо, я могу аутентифицироваться на сервере из пользовательского интерфейса.Однако любые последующие вызовы к защищенным EJB-компонентам из другого места, где на уровне пользовательского интерфейса произойдет сбой с «Неверный пользователь», хотя я уже аутентифицировался.

Я проверил аутентификацию в автономном клиенте, и она работает нормально,может впоследствии вызвать защищенный EJB.

Я также попробовал аутентификацию, описанную в этом посте, и пользовательский интерфейс по-прежнему не может вызывать защищенные EJB: http://iocanel.blogspot.com/2010/09/karafs-jaas-modules-in-action.html

Любая помощь будет принята с благодарностью.

С уважением,

Linh

1 Ответ

1 голос
/ 08 ноября 2011

Коллега mnie предложил мне посмотреть конфигурацию безопасности на веб-уровне. Я решил это со следующей конфигурацией:

JBoss-web.xml:

<jboss-web>
    <security-domain>java:/jaas/my-security-domain</security-domain>
</jboss-web>

web.xml:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>My Resource</web-resource-name>
        <url-pattern>/app/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.html</form-login-page>
        <form-error-page>/login-error.html</form-error-page>
    </form-login-config>
</login-config>

Спасибо всем.

1011 * Линх *

...