Spring Security MethodSecurityInterceptor - PullRequest
       0

Spring Security MethodSecurityInterceptor

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

У меня есть приложение Java, работающее на tomcat6. Я использую Spring 3.0.4 и Spring Security 3.0.5.

для защиты доступа к моим методам дао, я хочу использовать пружинную защиту MethodSecurityInterceptor. но этот на самом деле не «перехватывает» доступ вообще.

Он настроен так:

<bean id="securityInterceptor" class="org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor"> 

    <property name="authenticationManager"> 
        <ref bean="authenticationManager"/> 
    </property> 

    <property name="accessDecisionManager"> 
        <ref bean="accessDecisionManager"/> 
    </property> 

    <property name="securityMetadataSource">
        <value> 
            com.xkst.dao.InvoiceDao.*=ROLE_ADMIN
            com.xkst.dao.UserDao.*=ROLE_ADMIN
        </value>
    </property> 
</bean>

В соответствии с конфигурацией каждый доступ любого из методов UserDao должен быть перехвачен контролируемым.

Методы, которые должны быть защищены, доступны из Java-приложения с расширенными возможностями. Чтобы сделать услугу доступной для клиента, я использую пружину HttpInvokerServiceExporter.

Дао классы не экспортируются напрямую. экспортируется один сервисный класс, предоставляющий клиенту единую точку доступа.

На стороне клиента у меня есть clientContext.xml файл, который ссылается на экспортированную службу на сервере.

В коде клиента я просто загружаю контекст и выбираю из него экспортированный компонент

public class SecurityTest {
public static void main(String[] args) {


    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("clientContext.xml");
    EntityServiceInterface serverService = (EntityServiceInterface) ctx.getBean("entityServiceInterface");

    List<UserEntity> users = serverService.performGetAllUsers();
    for(UserEntity user : users) {
        System.out.println(user.getUserName());
    }

}

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

Я действительно не знаю, что такое недостающее звено.

authenticationManager и accessDecisionManager также настроены. при запуске сервера нет сообщения об ошибке. это даже регистрирует создание "безопасных методов" как:

2011-08-01 10:38:48,675  INFO MethodDefinitionMap:75 - Adding secure method [public java.util.List com.xkst.dao.UserDao.findAll()] with attributes [[ROLE_ADMIN]]

Так что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...