LINUX.ORG.RU

[spring][http-invoker] Basic authentication

 


0

2

Никаким образом не получается завести Basic Authentification через сервис, которые подается через http-invoker без контейнера, просо через Http сервер Java 6.

<bean name="exporter"
class="org.springframework.remoting.httpinvoker.SimpleHttpInvokerServiceExporter">
    <property name="service" ref="DatabaseDao"/>
    <property name="serviceInterface" value="shared.db.DatabaseDao"/>
</bean>

<bean id="httpServer"
class="org.springframework.remoting.support.SimpleHttpServerFactoryBean">
    <property name="contexts">
        <util:map>
        <entry key="/remoting/DatabaseDao" value-ref="exporter"/>
        </util:map>
    </property>

    <property name="port" value="8080" />
</bean>

Пока что есть такой код в самом DAO, который можно удаленно вызывать. В принципе работает, только после отсоединения необходимо его еще раз вызывать. Не хотелось бы дергать реконнект по каждому Exception и еще что-то придумывать по этому поводу. getAuthenticationManager() возвращает самописный менеджер, который возвращает роли из базы.

public int login(String username, String password) {
        /*return getJdbcTemplate().queryForInt("select id from users where username=? and password=?",
                new Object[]{username, password});*/
        Authentication request = new UsernamePasswordAuthenticationToken(username, password);
                Authentication result = getAuthenticationManager().authenticate(request);
                SecurityContextHolder.getContext().setAuthentication(result);
        return 0;
    }

Не прошу писать код, просто прошу подсказать в сторону какого класса смотреть. Требуется перехватить Basic Authentication Credentials и сделать это так, чтобы в том коде можно было получать SecurityContextHolder.getContext() и установить его автентификацию.

★★★★★

Поговорил сам с собой. Но кому интерестно, проблема решена

public class CustomBasicAuthenticator extends BasicAuthenticator {

    private AuthenticationManager authenticationManager;

    public CustomBasicAuthenticator() {
        super("localhost");
    }

    @Override
    public boolean checkCredentials(String username, String password) {
        if (SecurityContextHolder.getContext().getAuthentication() == null) {
            Authentication request = new UsernamePasswordAuthenticationToken(username, password);
            Authentication result = getAuthenticationManager().authenticate(request);
            SecurityContextHolder.getContext().setAuthentication(result);
            return true;
        } else {
            return true;
        }
    }

    /**
     * @return the authenticationManager
     */
    public AuthenticationManager getAuthenticationManager() {
        return authenticationManager;
    }

    /**
     * @param authenticationManager the authenticationManager to set
     */
    public void setAuthenticationManager(AuthenticationManager authenticationManager) {
        this.authenticationManager = authenticationManager;
    }
}
<bean name="basic" class="military.server.security.CustomBasicAuthenticator">
    <property name="authenticationManager" ref="authenticationManager"/>
</bean>

<bean id="httpServer"
class="org.springframework.remoting.support.SimpleHttpServerFactoryBean">
    <property name="authenticator" ref="basic"/>
...
vertexua ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.