2013-12-05 2 views
1

Я новичок в Spring и Spring-Security. Я читаю уроки hereУдаление учетных данных для входа пользователя из сеанса при выходе пользователя из системы безопасности весной

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

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

Он отлично работает, когда я сохраняю код выхода из системы как «j_spring_security_logout», который я не хочу использовать. Я хочу использовать пользовательские имена и URL-адреса, возможно ли это?

Это как моя весна-security.xml выглядит

<http auto-config="true" use-expressions="true"> 
    <intercept-url pattern="/login" access="permitAll" /> 
    <intercept-url pattern="/logout" access="permitAll" /> 
    <intercept-url pattern="/accessdenied" access="permitAll" /> 
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')" /> 
    <form-login login-page="/login" default-target-url="/list" 
     authentication-failure-url="/accessdenied" /> 
    <logout logout-success-url="/logout" invalidate-session="true" 
     delete-cookies="true" /> 
</http> 
<authentication-manager alias="authenticationManager"> 
    <authentication-provider> 
     <user-service> 
      <user name="hasif" password="password" authorities="ROLE_USER" /> 
     </user-service> 
    </authentication-provider> 
</authentication-manager> 

Это как мой LoginController выглядит

@Controller общественного класса LoginController {

@RequestMapping(value = "/login", method = RequestMethod.GET) 
public String login() {  
    return "login"; 
} 

@RequestMapping(value = "/logout", method = RequestMethod.GET) 
public String logout(HttpServletRequest request) { 
    HttpSession session = request.getSession(false); 
    session.invalidate(); 
    return "logout"; 
} 

@RequestMapping(value = "/accessdenied", method = RequestMethod.GET) 
public String accessdenied() { 
    return "accessdenied"; 
} 

}

+1

В вашей конфигурации вы указываете только «logout-succes-url», вы не произносите «logout-url». 'logout-succes-url' - это URL, который вы отправляете после выхода из системы. –

+0

@ M.Deinum это было. Я забыл поставить logout-url. Но есть ли способ изменить текстовое имя имени пользователя и пароля из их имен по умолчанию, таких как j_username и j_password? – Hasif

+1

Как насчет указания 'username-parameter' и' password-parameter' в теге 'form-login' ... Все это объясняется в документации! –

ответ

6

Ваша конфигурация неверна, вы должны указать атрибут logout-url, а не logout-success-url. Последний - это URL, который вы отправляете после выхода из системы.

<logout logout-url="/logout" invalidate-session="true" delete-cookies="true" /> 

delete-cookies принимает разделенный запятыми строку с именами файлов, для удаления, я сомневаюсь, что у вас есть печенье под названием true и сеанс недействительным по умолчанию. Таким образом, в основном следующее дает тот же результат.

<logout logout-url="/logout" /> 

Если вы хотите изменить имя параметра использовать для указания имени пользователя/пароля, добавить соответственно username-parameter и password-parameter на form-login элемента.

<form-login login-page="/login" default-target-url="/list" authentication-failure-url="/accessdenied" username-parameter="my-username-param" password-parameter="my-password-param"/> 

Для объяснения пространств имен я предлагаю читать из the reference guide.

0

Сначала Why do you want to do manually, когда весна Provi такая хорошая функция безопасности.

Без сомнения, вы можете справиться с этим самостоятельно. Для этого вам нужно всего лишь invalidate текущего сеанса, когда пользователь нажимает кнопку «Выход» или ссылку. Существует способ HttpSession#invalidate(), который может решить вашу проблему.

+0

Я попытался сделать недействительным сеанс с контроллера, но не имеет никакого эффекта. Я не изменяю никаких функций безопасности, я просто хочу использовать пользовательские имена URL и полей. Я уверен, что для этого он должен быть каким-то образом. Я просто хочу узнать. – Hasif

+0

@Hasif У вас есть Remember-Me, настроенный где-нибудь еще? – chrylis

+0

@chrylis no i do not. – Hasif

Смежные вопросы