, как он выглядит в SecurityContextHolder.getContext (). getAuthentication (); это означает, что клиент уже имеет cookie JSESSION, поэтому он уже аутентифицирован с именем пользователя и паролем.
Проверка пароля еще раз сделает этот метод бесполезным, поскольку он приведет к повторному завершению процесса аутентификации (получение пароль из базы данных, сравните его ...), и я думаю, это было написано, чтобы избежать этого. Кроме того, пароль не хранится в контексте SecurityContextHolder
В случае атаки CRSF может возникнуть потенциальное нарушение безопасности, но spring-security обеспечивает защиту от этого. см. spring-security csrf
Выражение ${foo}
использует за кулисами JspContext#findAttribute()
, который ищет атрибуты в PageContext
, HttpServletRequest
, HttpSession
и ServletContext
в этом порядке по методу getAttribute("foo")
, в соответствии с которым foo
из ${foo}
, таким образом, представляет имя атрибута "foo"
и возвращает первый не- -null object.
Итак, если вы делаете в сервлете
ArrayList<Person> persons = getItSomehow();
request.setAttribute("persons", persons); // It's now available by ${persons}
request.getRequestDispatcher("/WEB-INF/persons.jsp").forward(request, response);
И назовите этот сервлет по URL-адресу, вы сможете перебирать его в page.jsp
следующим образом:
<c:foreach items="${persons}" var="person">
${person.title}
<c:forEach>
Вышеупомянутое также равнозначно, когда вы помещаете его в область сеанса вместо
request.getSession().setAttribute("persons", persons);
или даже в область приложения
getServletContext().setAttribute("persons", persons);
EL будет для title
в ${person.title}
неявным образом искать общедоступный экземпляр (не статический!) метод с префиксом get
в классе Person
, как показано ниже:
public String getTitle() {
return title;
}
поле title
необязательно должно существовать в классе (поэтому вы можете даже вернуть строку с жесткой связью и продолжать использовать ${person.title}
), и это необязательно должно быть полем экземпляра (так что это также может быть статическое поле , пока геттерный метр сам сам не статичен).
Только у boolean
(не Boolean
!) геттеры имеют специальное лечение; EL неявно ищет общедоступный метод с префиксом is
. Например. для ${person.awesome}
:
public boolean isAwesome() {
return awesome;
}
Если вы используете сервлеты или класс действия для создания своего списка, а затем перенаправляете его на свой JSP, вы должны иметь следующую строку в своем сервлете или классе действий.
ArrayList<Person> names = "get from somewhere";
request.setAttribute("personNames",names);
<c:foreach var="item" items="${personNames}"> ${item.title} </c:foreach>
<c:forEach var="item" items="${names}"> ${item.title} </c:forEach>
names
должен быть установлен в качестве атрибута, доступного для представления