2010-09-19 2 views
1

Все, что я хочу, это просто помнить-меня. Я прочитал http://static.springsource.org/spring-security/site/docs/3.0.x/reference/remember-me.htmlПростая весна <вспомнить-мне /> ... помогите пожалуйста

То, что я сделал до сих пор:

  1. создал свой собственный UserDetailsService работать с Hibernate/JPA. Мой имплантат. не рассматривает какое-либо помните меня вещи
  2. Рассмотрены конфигураций через контекст приложение <security:remember-me key="89dqj219dn910lsAc12" user-service-ref="jpaUserDetailsService" token-validity-seconds="864000"/>
  3. Проверены, что печенье SPRING_SECURITY_REMEMBER_ME_COOKIE действительно установлен
  4. Помнить обеспеченный сайт и он работает
  5. Когда я перезагрузить браузер , я получаю сообщение об ошибке:

    org.springframework.security.access.AccessDeniedException: Доступ запрещен объекта проверки подлинности в виде строки: org.springframework.security.authentication.Rem emberMeAuthenticationToken @ 9ab72a70: Principal: [email protected]: Имя пользователя: myad; Пароль защищен]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Персональная информация: 65537; ; Учетные данные: [ЗАЩИТА]; Authenticated: true; Подробности: org.sprin[email protected]957e: RemoteIpAddress: 127.0.0.1; SessionId: null; Предоставленные власти: ROLE_ADMIN, ROLE_USER

А вот мой secContext.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:security="http://www.springframework.org/schema/security" 
     xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/security 
      http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 

    <security:global-method-security pre-post-annotations="enabled"> 
    </security:global-method-security> 

    <security:http use-expressions="true" access-denied-page="/accessDenied"> 
     <security:form-login 
       login-page="/login" 
       login-processing-url="/loginProcess" 
       default-target-url="/intro" 
       authentication-failure-url="/login?login_error=1" 
       /> 
     <security:logout 
       logout-url="/logout" 
       logout-success-url="/logoutSuccess"/> 

     <security:intercept-url pattern="/**" access="permitAll"/> 
     <security:intercept-url pattern="/login" access="permitAll"/> 
     <security:intercept-url pattern="/styles/**" access="permitAll"/> 
     <security:intercept-url pattern="/scripts/**" access="permitAll"/> 
     <security:remember-me key="89dqj219dn910lsAc12" user-service-ref="jpaUserDetailsService" 
           token-validity-seconds="864000"/> 
    </security:http> 

    <security:authentication-manager alias="authenticationManager"> 
     <security:authentication-provider user-service-ref="jpaUserDetailsService"> 
      <security:password-encoder hash="sha"> 
      </security:password-encoder> 
     </security:authentication-provider> 
    </security:authentication-manager> 

    <bean id="rememberMeFilter" class= 
      "org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter"> 
     <property name="rememberMeServices" ref="rememberMeServices"/> 
     <property name="authenticationManager" ref="authenticationManager"/> 
    </bean> 

    <bean id="rememberMeServices" class= 
      "org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices"> 
     <property name="userDetailsService" ref="jpaUserDetailsService"/> 
     <property name="key" value="89dqj219dn910lsAc12"/> 
    </bean> 

    <bean id="rememberMeAuthenticationProvider" class= 
      "org.springframework.security.authentication.RememberMeAuthenticationProvider"> 
     <property name="key" value="89dqj219dn910lsAc12"/> 
    </bean> 
</beans> 

и, наконец, некоторые трассировка

03:45:14.598 [[email protected]] DEBUG o.s.w.b.a.s.HandlerMethodInvoker - Invoking request handler method: public java.lang.String de.myapp.controller.bstController.showbstpage(java.lang.String,javax.servlet.http.HttpServletResponse) 
03:45:14.598 [[email protected]] DEBUG o.s.s.a.i.a.MethodSecurityInterceptor - Secure object: ReflectiveMethodInvocation: public java.lang.String de.myapp.controller.bstController.showbstpage(java.lang.String,javax.servlet.http.HttpServletResponse); target is of class [de.myapp.controller.bstController]; Attributes: [[authorize: 'isFullyAuthenticated() and #username == principal.username', filter: 'null', filterTarget: 'null']] 
03:45:14.598 [[email protected]] DEBUG o.s.s.a.i.a.MethodSecurityInterceptor - Previously Authenticated: org.spring[email protected]9ab72a70: Principal: [email protected]: Username: myad; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; PersonalInformation: 65537; ; Credentials: [PROTECTED]; Authenticated: true; Details: org.sprin[email protected]957e: RemoteIpAddress: 127.0.0.1; SessionId: null; Granted Authorities: ROLE_ADMIN, ROLE_USER 
03:45:14.599 [[email protected]] DEBUG o.s.c.c.s.GenericConversionService - Converting value false of [TypeDescriptor java.lang.Boolean] to [TypeDescriptor java.lang.Boolean] 
03:45:14.599 [[email protected]] TRACE o.s.c.c.s.GenericConversionService - Matched cached converter NO_OP 
03:45:14.599 [[email protected]] DEBUG o.s.c.c.s.GenericConversionService - Converted to false 
03:45:14.599 [[email protected]] DEBUG o.s.s.access.vote.AffirmativeBased - Voter: org.springframewor[email protected]a866a9, returned: -1 
03:45:14.599 [[email protected]] DEBUG o.s.s.access.vote.AffirmativeBased - Voter: [email protected], returned: 0 
03:45:14.599 [[email protected]] DEBUG o.s.s.access.vote.AffirmativeBased - Voter: [email protected]d6f, returned: 0 

Я действительно не знаю, где продолжать отладки. Что я пропустил? Должен ли я создать свою собственную реализацию mem-me?

Я действительно оценить пример приложения, которое демонстрирует рабочую реализацию по умолчанию пружин Запомни меня ...

-------- EDIT ---------- -

Я только что скомпилировал и запустил приложение-ссылку для напоминания, используя springsecurity: приложение для учетной записи spring-security\samples\tutorial и приложение для контактов. На самом деле, у меня есть точно такая же проблема?!?. Я пробовал firefox, opera и т. Д. ... Я разбит ...

ответ

0

Когда вы входите в систему, является ли поле «пароль» вашего объекта UserDetails равным ненулевому/непустому значению? В моем приложении фактическая аутентификация делегирована в другую систему, и я не сохраняю пароль, отправленный пользователем в моем объекте UserDetails. Я не мог заставить cookie RememberMe работать до тех пор, пока не установлю значение свойства password на значение. В моем случае я просто дефолтовал свойство на слово «пароль», чтобы он не был пустым/пустым.

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

1

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

Однако выход журнала показывает, что существует аннотация метода контроля доступа метода по методу контроллера bstController.showbstpage, который требует «полной» аутентификации из выражения isFullyAuthenticated() and #username == principal.username. Помните, что я не квалифицирую как полную проверку подлинности, поэтому выражение отклоняет текущую аутентификацию.

В стороне от intercept-url элементы ошибочно заказаны, так как /** находится наверху и будет применяться ко всем запросам, что сделает остальные излишними.

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

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

  • Нет связанных вопросов^_^