2014-10-03 3 views
0

У меня есть существующее веб-приложение, которое покрыто весной безопасности. мне нужно добавить сервлет (или родовую конечную точку), которая работает следующим образом:Spring Security Servlet Login

  • Он принимает POST с JSON
  • Он обрабатывает данные
  • выполняют аутентификацию
  • Возвращает ответ с другими данными.

Я прочитал документацию о безопасности весны (http://docs.spring.io/spring-security/site/docs/3.0.x/reference/springsecurity.html), но я немного смущен тем, как и где реализует мой код. Я думал об использовании специального фильтра в фазе 4: UsernamePasswordAuthenticationFilter. Однако я не уверен, потому что, если я правильно понимаю структуру, фильтр применяется к каждому запросу, и мне нужно войти только один раз, а затем принять его как аутентифицированный.

Правильно ли фильтр или есть лучшие методы?

ответ

0

При написании веб-службы предпочтительно, чтобы клиент был перенаправлен на каждый запрос. Это означает, что клиент должен каждый раз передавать свои учетные данные (имя пользователя/пароль).

BTW, если вы пишете веб-службу, может быть предпочтительнее использовать BasicAuthenticationEntryPoint поверх ssl вместо UserPasswordAuthenticaitonFilter.

Но, чтобы полностью ответить на ваш вопрос, мы использовали контрольный шаблон безопасности/http, чтобы сделать трюк.

<security:http pattern="/api/**" create-session="stateless" access-decision-manager-ref="unanimousBased" entry-point-ref="authenticationEntryPoint" > 
    <security:intercept-url pattern="/api/**" access="IS_AUTHENTICATED_FULLY,group_User_role_default" /> 
    <security:custom-filter ref="basicAuthenticationFilter" after="BASIC_AUTH_FILTER" /> 
</security:http> 

<bean id="basicAuthenticationFilter" class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter"> 
    <property name="authenticationManager" ref="authenticationManager" /> 
    <property name="authenticationEntryPoint" ref="authenticationEntryPoint" /> 
</bean> 

<bean id="authenticationEntryPoint" class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint"> 
    <property name="realmName" value="api" /> 
</bean> 

Наконец, как правило, лучше сначала разрешить обработку данных. Кажется странным, что данные будут обработаны, а затем проверьте авторизацию, чтобы узнать, можно ли отправить ответ, но, возможно, это только я.

+0

С помощью «обработки данных» я имею в виду, что код анализирует json и запрашивает базу данных для проверки учетных данных. Если я правильно понял, вы предлагаете использовать BasicAuthenticationEntryPoint, сопоставленный с URL-адресом моего сервлета/службы, правильно? –