假设,我有一个拥有大量servlet的Web服务器.对于在这些servlet之间传递的信息,我正在设置会话和实例变量.
现在,如果有2个或更多用户向此服务器发送请求,那么会话变量会发生什么?它们对所有用户都是通用的,或者对于每个用户而言都是不同的.如果它们不同,那么服务器如何区分不同的用户?
还有一个类似的问题,如果有n用户访问特定的servlet,那么这个servlet只在第一个用户第一次访问它时实例化,或者是否为所有用户单独实例化?换句话说,实例变量会发生什么?
java multithreading servlets session-variables instance-variables
我想知道当前的方法是关于使用JSF 2.0(如果存在任何组件)和Java EE 6核心机制(登录/检查权限/注销)的Web应用程序的用户身份验证,其中包含用户信息保存在JPA中实体.Oracle Java EE教程在这方面有点稀疏(仅处理servlet).
这没有使用整个其他框架,如Spring-Security(acegi)或Seam,但如果可能的话,试图用新的Java EE 6平台(Web配置文件).
我尝试在Web应用程序中创建登录表单.在我可以使用的JSP页面中
<%
String name = request.getParameter( "username" );
session.setAttribute( "theName", name );
%>
Run Code Online (Sandbox Code Playgroud)
但现在我使用JSF/Facelets进行Web应用程序我不知道如何在JSF Backing bean中为客户端创建会话,并检查用户是否已登录,因此它将重定向到登录页面.谁能帮我提一下这些问题的链接教程?谢谢你
现在我没有遇到映射到类Filter的web.xml代码的问题
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
LoginController controller = (LoginController) req.getSession()
.getAttribute("loginController");
if (controller == null || !controller.isLoggedIn()) {
res.sendRedirect("../admin/login.xhtml");
} else {
chain.doFilter(request, response);
}
}
Run Code Online (Sandbox Code Playgroud)
并在web.xml我用<fitler>标签映射
<filter>
<filter-name>userLoginFilter</filter-name> …Run Code Online (Sandbox Code Playgroud) 我的部分网站只能由授权用户访问.假设用户输入属于仅授权部分的页面a.html.
如果我要使用servlets/JSP,我可以编写一个过滤器来检查用户是否已登录,如果没有,则将其重定向到登录页面.成功登录后,用户将被重定向到他最初想要访问的页面,在本例中为a.html.(页面地址可以存储在请求中).
在JSF 2.0中实现此类场景的正确方法是什么?
目前,我正在为在线购物车创建一个 Web 应用程序,我需要在每个 jsf 页面上维护会话。
我的问题是:
如何在托管 bean 中创建和销毁会话
如何访问存储在会话变量中的值?像这样?
FacesContext.getCurrentInstance().getExternalContext().getSessionMap.put("key",object);
Run Code Online (Sandbox Code Playgroud)如何在 jsf 中销毁会话
我还需要使用销毁会话,session.invalidate()但我失败了!!