3

У меня есть веб-приложение, разработанное с использованием весеннего mvc и весенней безопасности 3.2. Я хочу, чтобы мое приложение использовало HTTP-аутентификацию для восстановления обслуживания и авторизацию входа в систему для другой части. Ниже моя конфигурация безопасности:Весна безопасности, либо http basic, либо авторизация входа в систему

<http pattern="/services/**" create-session="stateless" use-expressions="true"> 
    <intercept-url pattern="/**" access="hasRole('ROLE_REMOTE,ROLE_USER')"/> 
    <http-basic /> 
</http> 

<http auto-config="true" use-expressions="true"> 
    <intercept-url pattern="/static/**" access="permitAll" /> 
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')" /> 
    <form-login login-page="/login.do" always-use-default-target="true"  default-target-url="/main.do" /> 
    <logout invalidate-session="true" logout-success-url="/login.do" 
     logout-url="/j_spring_security_logout" /> 
</http> 

, что я ожидаю: когда пользователь Войти из формы, то она может вызвать успокоительную службу без пройти базовую аутентификацию (Поскольку он был идентифицирован). Моя мысль заключается в том, что пользователь с ролью «ROLE_USER» также должен вызвать службу обслуживания. Однако, что я получил после того, как я вышел из формы, мне также было предложено выполнить базовую проверку подлинности, пытаясь вызвать службу обслуживания из браузера.

Есть ли способ получить то, что я ожидаю?

ответ

2

Ответ может быть в description of the create-session attribute:

  • never - Spring Security никогда не будет создавать сессии, но будет использовать один, если приложение делает.
  • stateless - Spring Security не создает сеанс и игнорирует сеанс для получения Spring Authentication.

Поскольку вы выбрали stateless, объект auth сохранялся в сеансе после того, как форма-логин игнорируется. Попробуйте, если never работает так, как вы ожидаете.

+0

Это работает, спасибо. –

+1

Как вы справляетесь с проблемой того, что пользователь все равно получит сообщение об ошибке HTTP 401 Unauthorized, если истек срок действия сеанса из входа на основе формы. Это заставляет браузер отображать базовое диалоговое окно проверки подлинности. – lanoxx