beans.NotReadablePropertyException в весенней безопасности - PullRequest
5 голосов
/ 16 марта 2011

Я очень новичок в весенней безопасности. Я взял эту книгу и пытаюсь выполнить код.

Пока я делаю это, я получаю

org.springframework.beans.NotReadablePropertyException: Invalid property
'principal.username' of bean class 
[org.springframework.security.authentication.AnonymousAuthenticationToken]: 
Bean property 'principal.username' is not readable or has an invalid getter 
method: 
Does the return type of the getter match the parameter type of the setter?

Моя xml-конфигурация spring-security:

<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/login.do" access="permitAll"/>
    <intercept-url pattern="/*" access="hasRole('ROLE_USER')"/>
    <form-login login-page="/login.do"/>
</http>


<authentication-manager alias="authenticationManager">

    <authentication-provider>
        <user-service id="userService">
            <user authorities="ROLE_USER" name="guest" password="guest"/>
        </user-service>
    </authentication-provider>
    <!-- Ch 3 Change Password Service -->
    <!-- 
    <authentication-provider user-service-ref="userService"/>
     -->
</authentication-manager>

Я что-то упустил?

Дайте мне знать, если вам нужна дополнительная информация.

Ответы [ 3 ]

9 голосов
/ 16 марта 2011

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

Я подозреваю, что проблема действительно возникает либо в коде вашего сервлета, либо в JSP, который пытается получить доступ к имени текущегопользователь с помощью пружинного тега безопасности.

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

(Для чего бы то ни было, AnonymousAuthenticationToken имеет свойство principal, но это свойство обычно не является объектом, имеющим username свойство. Действительно, это часто просто строка.)

8 голосов
/ 04 апреля 2012

Я читаю / следую книге "Spring Security 3". Просто добавьте следующие строки в header.jsp. Проблема в том, что имя Principal.user не существует, если вы не вошли в систему.

<div class="username">
    Welcome, 
    <sec:authorize access="isAuthenticated()">  
        <strong><sec:authentication property="principal.username"/></strong>
    </sec:authorize>
</div>
0 голосов
/ 01 ноября 2017

Необходимые условия:

  1. Добавьте ярлык безопасности Spring на странице JSP, в которой вы хотите указать имя пользователя,

    <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
    
  2. Добавьте пружинные банки безопасности, используйте

    <sec:authentication property="principal" />
    

    в jsp, где вы хотите показать имя пользователя

Появится следующее:

  1. anonymousUser , означает, что пользователь не авторизован
  2. строковое представление объекта , означает, что пользователь вошел в систему

Но не печатать строковое представление объекта на странице.

Вот псевдокод:

if principal==anonymousUser
    show login button
else (do not use principal here too)
    show username with logout button
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...