Есть ли проблема при вставке проверки в шаблон? - PullRequest
3 голосов
/ 30 января 2012

Есть ли проблемы, если я вставлю какую-нибудь проверку в файл шаблона? Например, если я вставлю проверку пользователя в файл xhtml шаблона, это может быть некоторой проблемой безопасности, если я буду использовать этот шаблон на ВСЕХ своих страницах xhtml?

Что-то вроде:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title><ui:insert name="title">Default Title</ui:insert></title>
        <h:outputStylesheet name="css/jsfcrud.css"/>
    </h:head>
    <h:body>
        <h:panelGroup rendered="#{userBean.cognome!=null}">
            Utente connesso:<h:outputText value="#{userBean.cognome}"/>&nbsp;<h:outputText value="#{userBean.nome}"/>
            <h1><ui:insert name="title">Default Title</ui:insert></h1>
            <p><ui:insert name="body">Default Body</ui:insert></p>
        </h:panelGroup>
    </h:body>
</html>

Ответы [ 2 ]

4 голосов
/ 02 апреля 2012

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

Обычно это уже учитывается, если вы используете управляемую контейнером аутентификацию Java EE.Но если вы используете домашнюю аутентификацию, для этого вам нужно создать фильтр сервлетов .Если вы соберете все запрещенные страницы в общей папке, например /app, чтобы вы могли использовать общий шаблон URL для фильтра, например, /app/* (и разместите все общедоступные страницы, такие как страница входа , за пределами ,папку), тогда вы сможете отфильтровать незарегистрированных пользователей следующим образом, предполагая, что #{userBean} является JSF @ManagedBean области сеанса или каким-либо атрибутом сеанса, который вы сами поместили в область сеанса:

@WebFilter("/app/*")
public class LoginFilter implements Filter {

    @Override
    public void init(FilterConfig config) throws ServletException {
        // NOOP.
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        HttpSession session = request.getSession(false);
        UserBean user = (session != null) ? (UserBean) session.getAttribute("userBean") : null;

        if (user == null || user.getCognome() == null) {
            response.sendRedirect(request.getContextPath() + "/login.xhtml"); // No logged-in user found, so redirect to login page.
        } else {
            chain.doFilter(req, res); // Logged-in user found, so just continue request.
        }
    }

    @Override
    public void destroy() {
        // NOOP.
    }

}

См. Также:

2 голосов
/ 02 апреля 2012

Я сомневаюсь, что у вас будут проблемы с безопасностью, но убедитесь, что вы поместили шаблоны в папку WEB-INF, чтобы шаблоны не имели видимости снаружи.Я также рекомендую вам использовать Spring-Security.

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