Как использовать jstl внутри jsp-страницы [duplicate]

, как он выглядит в SecurityContextHolder.getContext (). getAuthentication (); это означает, что клиент уже имеет cookie JSESSION, поэтому он уже аутентифицирован с именем пользователя и паролем.

Проверка пароля еще раз сделает этот метод бесполезным, поскольку он приведет к повторному завершению процесса аутентификации (получение пароль из базы данных, сравните его ...), и я думаю, это было написано, чтобы избежать этого. Кроме того, пароль не хранится в контексте SecurityContextHolder

В случае атаки CRSF может возникнуть потенциальное нарушение безопасности, но spring-security обеспечивает защиту от этого. см. spring-security csrf

6
задан BalusC 28 August 2015 в 14:18
поделиться

3 ответа

Выражение ${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;
}

См. также:

14
ответ дан Community 26 August 2018 в 19:12
поделиться

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

ArrayList<Person> names = "get from somewhere";

request.setAttribute("personNames",names);  

<c:foreach var="item" items="${personNames}"> ${item.title} </c:foreach>
0
ответ дан ashishjmeshram 26 August 2018 в 19:12
поделиться
<c:forEach var="item" items="${names}"> ${item.title}  </c:forEach>

names должен быть установлен в качестве атрибута, доступного для представления

1
ответ дан Jigar Joshi 26 August 2018 в 19:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: