Как пропустить весеннюю аутентификацию для конкретного метода контроллера

1

Как пропустить определенный метод из проверки подлинности весной mvc. Мой файл spring_security.xml содержит:

<http auto-config="true" use-expressions="true">
      <intercept-url pattern="/logout" access="permitAll"/>
      <intercept-url pattern="/login" access="permitAll"/>
      <intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
      <logout logout-success-url="/logoutPage" logout-url="/logout" />
      <form-login authentication-failure-url="/login?auth=fail"
          login-page="/login"
          login-processing-url="/loginPage" 
          password-parameter="password"
          username-parameter="username"
      />
</http>
<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" />

Теперь, как я могу пропустить аутентификацию для метода, определенного ниже, используя annotation

@Controller
public class DataController {

    @PreAuthorize("permitAll")
    @RequestMapping(value = "/data/info", method = RequestMethod.GET, headers = "Content-Type=application/json")
    public @ResponseBody String getDetails() {
        // some code
    }
}

То, что я использовал, не работает. Благодарю.

Теги:
spring-security
spring
spring-mvc

3 ответа

1

В весенней безопасности есть два уровня безопасности:

  • Безопасность на основе URL-адресов, управляемая элементами intercept-url
  • основанная на методе, в основном управляемая с аннотациями PreAuthorize.

Вы можете смешивать эти два метода, а метод безопасности может использоваться с очень уточненными правилами, особенно с ACL, и может применяться к методам обслуживания или модели, но он не может использоваться для перезаписывания ограничений на основе URL.

0

попробуйте использовать что-то подобное

<http pattern="/data/info**" security="none"/>  
0

Вы не можете. intercept-url оценивается перед аннотациями контроллера.

Однако вы можете решить это, добавив следующее к вашему xml:

<intercept-url pattern="/data/info" access="permitAll"/>

@PreAuthorize("permitAll") не имеет смысла, поскольку в принципе это не-op.

  • 0
    Но нет ли их аннотации, которую можно использовать вместо определения в xml, потому что у меня так много методов, которые требуют permitAll
  • 0
    Вы можете использовать аннотации (ы) вместо xml, но вы не можете переопределить правила, определенные в xml аннотациями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню