Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 在模板中插入一些支票是否存在问题?_Security_Jsf 2 - Fatal编程技术网

Security 在模板中插入一些支票是否存在问题?

Security 在模板中插入一些支票是否存在问题?,security,jsf-2,Security,Jsf 2,如果我在模板文件中插入一些检查,是否存在一些问题?例如,如果我将用户检查插入到模板的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-transition

如果我在模板文件中插入一些检查,是否存在一些问题?例如,如果我将用户检查插入到模板的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>

默认标题
康纳索中尉:
默认标题
默认主体


我怀疑您是否会遇到安全问题,但请确保将模板放在WEB-INF文件夹中,这样模板就不会从外部可见。我还建议您使用Spring Security

我知道您在显示内容之前正在检查登录用户的状态。这样可能没问题,但是任何未登录就打开页面的用户都会收到空白内容。这对用户不是很友好。您希望将未登录的用户重定向到登录页面

如果您使用的是JavaEE提供的容器管理的身份验证,通常已经考虑到了这一点。但如果您是家庭成长认证,则需要为此创建一个新的身份验证。如果您在一个公共文件夹(如
/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票,悬赏将自动授予该答案。