相关疑难解决方法(0)

servlet如何工作?实例化,会话,共享变量和多线程

假设,我有一个拥有大量servlet的Web服务器.对于在这些servlet之间传递的信息,我正在设置会话和实例变量.

现在,如果有2个或更多用户向此服务器发送请求,那么会话变量会发生什么?它们对所有用户都是通用的,或者对于每个用户而言都是不同的.如果它们不同,那么服务器如何区分不同的用户?

还有一个类似的问题,如果有n用户访问特定的servlet,那么这个servlet只在第一个用户第一次访问它时实例化,或者是否为所有用户单独实例化?换句话说,实例变量会发生什么?

java multithreading servlets session-variables instance-variables

1105
推荐指数
6
解决办法
28万
查看次数

当用户登录Web应用程序时,如何实现"保持登录状态"

在大多数网站上,当用户即将提供登录系统的用户名和密码时,会出现一个"保持登录状态"的复选框.如果选中该复选框,它将使您在同一Web浏览器的所有会话中登录.如何在Java EE中实现相同的功能?

我正在使用基于FORM的容器管理身份验证和JSF登录页面.

<security-constraint>
    <display-name>Student</display-name>
    <web-resource-collection>
        <web-resource-name>CentralFeed</web-resource-name>
        <description/>
        <url-pattern>/CentralFeed.jsf</url-pattern>
    </web-resource-collection>        
    <auth-constraint>
        <description/>
        <role-name>STUDENT</role-name>
        <role-name>ADMINISTRATOR</role-name>
    </auth-constraint>
</security-constraint>
 <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>jdbc-realm-scholar</realm-name>
    <form-login-config>
        <form-login-page>/index.jsf</form-login-page>
        <form-error-page>/LoginError.jsf</form-error-page>
    </form-login-config>
</login-config>
<security-role>
    <description>Admin who has ultimate power over everything</description>
    <role-name>ADMINISTRATOR</role-name>
</security-role>    
<security-role>
    <description>Participants of the social networking Bridgeye.com</description>
    <role-name>STUDENT</role-name>
</security-role>
Run Code Online (Sandbox Code Playgroud)

forms-authentication java-ee stay-logged-in

53
推荐指数
2
解决办法
4万
查看次数

会话或cookie混淆

我在一些网站上看到用户登录了他们的帐户然后关闭了浏览器.

关闭并重新打开浏览器后,他们的帐户仍然已登录.

但有些网站,不能这样做.

我很困惑,它被认为是会话或cookie?

如果我希望我的网站像这样登录,我是否必须设置session.setMaxInactiveInterval()cookie.setMaxAge()

cookies session servlets

19
推荐指数
2
解决办法
5万
查看次数

如何从JSESSIONID加载Java HttpSession?

我想HttpSession通过JSESSIONID 获取Java .可能吗?如果有,怎么样?

java servlets httpsession

13
推荐指数
1
解决办法
3万
查看次数

在JSF中"记住我"的Cookie

我有一个登录页面,我想添加"记住我"功能; 这样,如果用户注销并再次打开页面,则会加载他的用户名和密码.为此,当用户登录(并"选中"记住我")时,我保存以下cookie:

FacesContext facesContext = FacesContext.getCurrentInstance();
Cookie userCookie = new Cookie("vtusername", username);
userCookie.setMaxAge(3600);
((HttpServletResponse) facesContext.getExternalContext()
       .getResponse()).addCookie(userCookie);
Cookie passCokie = new Cookie("vtpassword", password);
passCokie.setMaxAge(3600);
 ((HttpServletResponse) facesContext.getExternalContext()
       .getResponse()).addCookie(passCokie);
Run Code Online (Sandbox Code Playgroud)

问题是后来(在同一个会话中)我读了cookie,我看到maxAge = -1; 即使我把它设置为3600 ......为什么?另一个问题:如果我使用userCookie.setSecure(true)设置cookie安全,那么我无法读取它(它消失了).

另一个问题:由于密码存储在cookie中,我应该如何对其进行加密?什么是最佳做法?

提前致谢

java cookies jsf

8
推荐指数
1
解决办法
9383
查看次数

登录后,在重新访问时自动登录JSF应用程序

对于典型的最典型的面向互联网的网站,当您通过关闭选项卡登录并离开网站时(不登出),然后在连续重访时,您可能不需要重新指定您的凭据或登录,您直接登录.

如何在后端发生这一切?如何在我的JSF 2.1应用程序上启用此类机制?


在Tomcat7服务器上使用JSF 2.1

java jsf tomcat primefaces

6
推荐指数
1
解决办法
3289
查看次数

在Java servlet中,cookie.getMaxAge()始终返回-1

如果我在将来设置一个带有setMaxAge()的cookie,当我在后续请求中将cookie读回内存时,getMaxAge()会给我一个-1.我已经通过Chrome的设置和检查员检查了实际的Cookie,并且我可以验证到期日期确实设置为60天.

static public void setHttpCookie(HttpServletResponse response, String payload) {
    Cookie c = new Cookie(COOKIE_NAME, payload);
    c.setMaxAge(60*86400); // expire sixty days in the future
    c.setPath("/"); // this cookie is good everywhere on the site
    response.addCookie(c);
}

static public String checkForCookie(HttpServletRequest req) {
    Cookie[] cookies = req.getCookies();
    if ( cookies != null ) {
        for ( Cookie c : cookies ) {
            if ( COOKIE_NAME.equals(c.getName()) ) {
                int maxAge = c.getMaxAge();
                logger.debug("Read back cookie and it had maxAge of {}.", maxAge);
                String …
Run Code Online (Sandbox Code Playgroud)

java cookies servlets http

6
推荐指数
1
解决办法
3650
查看次数

你有多长时间保持会话cookie?

我正在实现一个使用会话的Web应用程序.我正在使用GWT和app引擎作为我的客户端/服务器,但我不认为他们做的事情与我用PHP和apache等做的有什么不同.

当用户登录我的Web应用程序时,我正在使用HttpSession为他们启动会话.我得到这样的会话ID:

// From my login servlet:
getThreadLocalRequest().getSession(false).getId();
Run Code Online (Sandbox Code Playgroud)

我将sessionId返回给客户端,并将它们存储在cookie中.我正在使用的教程在两周内将此cookie设置为"过期":

Cookie.write("sid", theSessionId, 1000 * 60 * 60 * 24 * 14); // two weeks
Run Code Online (Sandbox Code Playgroud)

这里是我困惑的地方:如果cookie在两周内到期,那么我的用户将愉快地使用webapp,只有一天浏览到我的网站并显示登录屏幕.我有什么选择?我可以为此cookie设置没有过期时间吗?这样用户就必须明确注销,否则他们可以永远使用应用程序而无需重新登录?

或者有更好的方法吗?我不记得像Twitter这样的网站要求我重新登录.我似乎永久登录.他们只是没有设置过期?

webapp不保护任何类型的高度敏感数据,所以我不介意留下一个没有过期的cookie,但似乎必须有更好的方法?

这是我引用的教程:

http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ

谢谢

session gwt servlets web-applications

5
推荐指数
1
解决办法
3341
查看次数

浏览器重启Java后保持会话

我正在使用Java servlets / jstl进行小型项目

我已经创建了带有会话的登录名,并且我希望浏览器即使在浏览器重新启动后仍保留该会话。

我写了这段代码:

HttpSession session=request.getSession();
session.setMaxInactiveInterval(604800);
session.setAttribute("loggedOnUser", true);
Run Code Online (Sandbox Code Playgroud)

我已将会话超时设置为一周。但是,每当我关闭浏览器并重新打开它时,我都需要再次登录。当我查看浏览器的cookie时,包含sessionId的cookie仍会在浏览器关闭时过期。我以为“ setMaxInactiveInterval”会将其更改为一个星期。有人知道问题出在哪里吗?

java session servlets web-applications

5
推荐指数
1
解决办法
1795
查看次数

如何在没有引号的情况下创建cookie?

我需要用电子邮件地址创建cookie作为值 - 但是当我尝试 - 然后我有结果:

"someone@example.com"

但我希望:

someone@example.com

应该创建cookie而不使用双引号 - 因为其他应用程序以这种格式使用它.如何强制java不添加双引号?Java添加它们因为有特殊的字符"at".

我这样创建cookie:

    HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    Cookie cookie = new Cookie("login", "someone@example.com");
    cookie.setMaxAge(2592000);
    cookie.setDomain("domain.com");
    cookie.setVersion(1);
    response.addCookie(cookie);
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

cookies quotes servlets http

4
推荐指数
1
解决办法
7940
查看次数

Servlet会话超时

我正在编写我的SPring MVC Web应用程序.

我将会话时间设置为10080分钟,等于1周.现在我想让用户每次打开浏览器时都会登录:

sessionService.setcurrentUser(myuser);
      HttpSession session = request.getSession();
      Cookie cookie = new Cookie("JSESSIONID", session.getId());
      cookie.setMaxAge(timeout);
      response.addCookie(cookie);
Run Code Online (Sandbox Code Playgroud)

我的cookie Max Age应该与会话超时相同吗?

cookie.setMaxAge(10080);
Run Code Online (Sandbox Code Playgroud)

这是好习惯吗?

java servlets spring-mvc

3
推荐指数
1
解决办法
8929
查看次数

防止蜘蛛乱搞Tomcat会话

我有一个相当新的网站(~3周龄)在Tomcat上运行,到目前为止访问量非常少.

对于上周我已经注意到了1000多个活动会话,并检查Tomcat的localhost_access*日志显示,绝大多数是从IP地址即将在此范围内:119.63.196*所有看起来属于百度日本.

这是一个小例子,来自他们登录头版的日志.119.63.196.107 - - [24/8/2011:07:02:46 0000] "GET /; JSESSIONID = 94085F76780ACFD96C8109A29446288D HTTP/1.1" 200 10311 119.63.196.44 - - [24/8/2011:07:03:21 0000] "GET /; JSESSIONID = 943133C77BB1756CF11592115BA81725 HTTP/1.1" 200 10333 119.63.196.39 - - [24/8/2011:07:03:56 0000] "GET /; JSESSIONID = 9B4384BDECF540C8628467F7AB4AB463 HTTP/1.1" 200 10311 119.63 .196.19 - - [24/8/2011:07:04:31 0000] "GET /; JSESSIONID = A0B555C3A18377D993B97D4491DD1012 HTTP/1.1" 200 10311 119.63.196.45 - - [24/8/2011:07:05:10 + 0000] "GET /; JSESSIONID = A3782FA61558BF11C4D5AC4F3DD1EC86 HTTP/1.1" 200 10311 119.63.196.23 - - [24/8/2011:07:05:53 0000] "GET /; JSESSIONID = A3AF84EF13F21492EB47FAB001A1C2E5 HTTP/1.1" …

java session tomcat servlets

3
推荐指数
1
解决办法
1508
查看次数

请记住我在jsp登录页面

我有一个login screen,我通过检查数据库中的凭据来验证用户.但我该如何实施Remember me check box?就像在gmail中一样remember me(stay signed in).我使用sign.jsp,并Auth servlet (doPost)oracle 10g ee认证.

java jsp servlets login remember-me

2
推荐指数
1
解决办法
2万
查看次数