php';JSP中的s头等价物

php';JSP中的s头等价物,php,jsp,header,authentication,jspinclude,Php,Jsp,Header,Authentication,Jspinclude,在php中,我通过检查会话中的成员id来验证用户是否登录,如果设置为ok,则页面将通过标题重定向到登录页面。这个auth脚本在auth.php中,我曾经将它包含在任何需要登录的页面中。简单。然而,我不能在jsp中做同样的事情。因为不管auth.jsp做什么,包含auth.jsp的页面的其余部分都会被加载。auth.jsp是 <% UserService userService = UserServiceFactory.getUserService(); User user = userSe

在php中,我通过检查会话中的成员id来验证用户是否登录,如果设置为ok,则页面将通过标题重定向到登录页面。这个auth脚本在auth.php中,我曾经将它包含在任何需要登录的页面中。简单。然而,我不能在jsp中做同样的事情。因为不管auth.jsp做什么,包含auth.jsp的页面的其余部分都会被加载。auth.jsp是

<%
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if (user == null) {
%>
<jsp:forward page="/index"/>
<%
return; 
}
%>

如果用户未登录,他仍然可以看到登录页面下方的原始页面。正因为如此,我不得不在每个页面上手动包含用户使用if-else进行检查,非常不方便。有什么解决办法吗?? 包含页面为

<jsp:include page="auth.jsp" />
<p>Welcome</p>

欢迎光临


至少,您可以编写自己的自定义Servlet过滤器。每次发出请求时都会调用它,而无需您做任何事情

此外,您可能需要研究容器级安全性,或者evenSpring安全性。两个人都为你处理这件事

编辑:

没问题

同时,您可能希望在auth.jsp中执行类似的操作

<%
  if (user == null){
    response.sendRedirect(redirectURL);
  }
%>
这有点像你对PHP的习惯。

A绝对是你想要的。你也可以抓住或者,但鉴于你的知识,这些可能是一些太远的步骤,无法得到正确的把握

下面是过滤器的
doFilter()
方法的基本示例:

if (UserServiceFactory.getUserService().getCurrentUser() != null) {
    chain.doFilter(request, response); // User is logged in, just continue request.
} else {
    ((HttpServletResponse) response).sendRedirect("/login.jsp"); // Not logged in, show login page. You can eventually show the error page instead.
}
将此筛选器映射到
web.xml
中的
url模式
中,覆盖要验证的页面。例如,
/secured/*
/private/*
/authenticated/*
等,并将所有JSP(登录页面除外!)放在同一文件夹中



至于它在JSP中失败的原因:当响应已经提交时,可能会发生这种情况。如果您已经阅读了服务器日志,那么您应该已经看到调用
点处的
非法状态异常:响应已提交。这在PHP中起作用可能是因为它有一个更大的响应缓冲区,或者因为该逻辑恰好在响应体的任何部分之前被正确调用,因此正好在
之前,等等。只要响应未提交,您就可以使用forward或redirect更改其目的地。

检查此项:将研究容器级安全性和Spring安全性。我是java新手。请查看我上面的编辑。这可能更接近您对PHP的习惯。谢谢。事实上,我花了一个多小时才弄清楚过滤器的各个部分,并写出了工作代码。我的第一个问题是关于重定向到登录页面,而不是链接到错误页面。我应该先学java,但我觉得这些书很吓人。
if (UserServiceFactory.getUserService().getCurrentUser() != null) {
    chain.doFilter(request, response); // User is logged in, just continue request.
} else {
    ((HttpServletResponse) response).sendRedirect("/login.jsp"); // Not logged in, show login page. You can eventually show the error page instead.
}