Альтернатива ассоциации безопасности в AS7 / Picketbox 4 - PullRequest
0 голосов
/ 08 августа 2011

У меня есть следующий класс в приложении Seam 2, которое используется вместе с SPNEGO для проверки подлинности Kerberos.В финале AS7 (который использует Pickbox 4.0.0.CR1) класс SecurityAssociation был удален.Какой класс или функцию я должен использовать вместо SecurityAssociation.getPrincipal () и SecurityAssociation.getSubject () ?

package com.redhat.topicindex.security;


import java.lang.reflect.Field;


import javax.faces.context.FacesContext;


import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Startup;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.core.Events;
import org.jboss.seam.security.Identity;
import org.jboss.security.SecurityAssociation;


@SuppressWarnings("serial")
@Name("org.jboss.seam.security.identity")
@Scope(ScopeType.SESSION)
@Install(precedence = Install.DEPLOYMENT)
@BypassInterceptors
@Startup
public class CustomIdentity extends Identity {


          private static final String SUBJECT = "subject";
          private static final String PRINCIPAL = "principal";
          private static final String LOGGED_IN = "loggedIn";


          @Override
          public String login() {

                    if(isLoggedIn()) return LOGGED_IN;

                    try {
                              getCredentials().setUsername(FacesContext.getCurrentInstance().getExternalContext().getRemoteUser());
                              getCredentials().setPassword("");

                              Field field = Identity.class.getDeclaredField(PRINCIPAL);
                              field.setAccessible(true);
                              field.set(this, SecurityAssociation.getPrincipal()); 

                              field = Identity.class.getDeclaredField(SUBJECT);
                              field.setAccessible(true);
                              field.set(this, SecurityAssociation.getSubject());

                              if (Events.exists()) Events.instance().raiseEvent(EVENT_LOGIN_SUCCESSFUL);

                              return LOGGED_IN;
                    } catch (Exception e) {
                              e.printStackTrace();
                              return null;
                    }

          }
}

1 Ответ

2 голосов
/ 16 августа 2011

На этот вопрос ответили http://community.jboss.org/thread/170545:

SecurityContext sc = SecurityContextAssociation.getCurrentContext();
sc.getUti().getSubject()  
(...)

Этот патч больше не работает с последней (сейчас, март 2015 г.) версией PickectBox (4.0.21.Beta1). Эквивалентный код выглядит следующим образом:

SecurityContextAssociation.getSubject();
...