`
kyvin
  • 浏览: 32819 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

关于webwork中的单用户登录的想法

阅读更多

    前提:只单纯从算法或逻辑上去处理,只是小型系统而已,并不想采用什么中间件
环境如下:
    1.当用户登录后,我们可以通过程序纪录下用户的IP来控制,当另外一个用户再次利用该账号登陆时,我们可以或许该用户的IP地址,纪录到数据库中,当用户调用相应的action时,我们可以设置一个拦截器直接来拦截,进行比对,当不满足的直接回到原始页面。
      存在问题:当用户是用代理上网,似乎这样就行不通了。

    2.我们可以在数据库中设置一个字段来纪录,当用户登录后update这个字段,这样再次利用这个用户登录系统时,会被系统拒绝掉。
      存在问题:对用户不友好,但用户账号泄密时,似乎这样做不到强制登录,来剔除正在登录用户,虽然我做过一个强制登录,可能技术有限,暂时想不到啥好算法来实现,特别是利用webwork的session来控制更让我头大,cookies没考虑。

    不知道有这方面经验的朋友有没有好的算法或者想法,一起来分享下 
分享到:
评论
16 楼 WinLive 2007-11-12  
HttpSession hs=ServletActionContext.getRequest().getSession();
String sid="";
if(hs!=null)
      sid=hs.getId();

我是在Interceptor中用这个方法获得sessionId的
15 楼 pythonjyc 2007-11-12  
继续关注,有时浏览器也会影响SESSION
14 楼 andyao 2007-08-03  
itea 写道
icefire的方法我想到过,
但是这个方法有个问题,
如果用户的session是因为超时而自动失效的话,它还是会留在那个map中,这样用户一多的话就吃内存。
可能,在可以接受的范围内。

to kyvin, webWork没有取到request的方法么?有的话可以从request上取session. HttpSession有getSession()方法。


你可以做一个HttpSessionListener,当用户session超时失效时。调用public void sessionDestroyed方法,从map中remove掉失效session.
13 楼 kyvin 2007-05-31  
拦截器为aop思想 是不是与webwork这种传统的横向处理没有交叉点 就是无法在其中调用组件或者接口 来查询数据库获取数据 或者说获取最新的对象
12 楼 kyvin 2007-05-27  
下面是我利用算法做的一个拦截器,主要就是为了解决上述问题,可存在一个问题是:

每次用户登录虽然通过HttpSession获取的sessionId是不同的,这个时候要想实现单用户登录,也可以自己设计一个方法来做,但是我选择了拦截器,下面是我的拦截器代码

	public String intercept(ActionInvocation invocation) throws Exception {

			HttpServletRequest request = ServletActionContext.getRequest();
			HttpSession session = request.getSession();		
			String hashcode=session.getId();
	        Customer customer =(Customer) invocation.getInvocationContext().getSession().get("customer");
	        
	        if(customer!=null){
	        	
	        	if(hashcode!=null){

	        		String hashcodetemp=customer.getPointcode();
	        		if(hashcodetemp.equals(hashcode)){
	        	        ThreadLocalUser.set(customer);

	        	        String result = invocation.invoke();
	        	        ThreadLocalUser.set(null);
	        			loggedIn = true;
	        	        return result;
	        		}
	        		ActionContext.getContext().getSession().clear();
	        		HttpServletRequest req = ServletActionContext.getRequest();
	        		HttpSession sessionnull = req.getSession();
	        		sessionnull.invalidate();
					ActionSupport action = (ActionSupport) invocation.getAction();
					action.addActionError("^o^你的账号已经在其它地方登录^o^");
					loggedIn = false;
		            return Action.LOGIN;
	        	}
				ActionSupport action = (ActionSupport) invocation.getAction();
				action.addActionError("^o^你的账号已经在其它地方登录^o^");
				loggedIn = false;
	            return Action.LOGIN;	            
	        }
		loggedIn = false;
		return Action.LOGIN;
	}



在调试的过程发现,每次获取的Customer对象中的postcode竟然是没有刷新的,而是从session获取的,虽然我已经在第二个用户强制登录后update了 postcode这个列,我也想了其它方法来check或者fetch这个customer对象,但是都是出现null指针问题,暂时想不出法子,有能帮忙解决的吗 谢谢了
11 楼 kyvin 2007-05-27  
kyvin 写道
刚刚我在对webwork操作时 利用了session的.hashcode()方法得到了区别同一用户前后登录的编号,并且在后续操作过程中 有两个hashcode()总是会保持不变,似乎可以利用这个来处理 可存在一个问题 就是用户登录时我获取的hashcode与用户在请求其他action的hashcode竟然不同,而其他任何一个action由session获得的hashcode都相同,
差点就成了罪人误导人了 上面的hashcode 如果单纯在各个action之间流走不会变化,可是当出现有验证码的页面,它会因为验证码的session变化而使得这个hashcode变化 按照icefire的算法,我现在是直接在登录时直接创建一个HttpSession 这样通过这个HttpSession获取ID,这样好象可以保证SessionID不发生变化,达到所需效果
10 楼 kyvin 2007-05-27  
刚刚我在对webwork操作时 利用了session的.hashcode()方法得到了区别同一用户前后登录的编号,并且在后续操作过程中 有两个hashcode()总是会保持不变,似乎可以利用这个来处理 可存在一个问题 就是用户登录时我获取的hashcode与用户在请求其他action的hashcode竟然不同,而其他任何一个action由session获得的hashcode都相同,
9 楼 kyvin 2007-05-27  
itea 写道
icefire的方法我想到过,
但是这个方法有个问题,
如果用户的session是因为超时而自动失效的话,它还是会留在那个map中,这样用户一多的话就吃内存。
可能,在可以接受的范围内。

to kyvin, webWork没有取到request的方法么?有的话可以从request上取session. HttpSession有getSession()方法。
呵呵 我可没说不能取噢 我只是说难道要把session转化为HttpSession类型来获取,我只是发现好象webwork中得到的session并不获取sessionID的方法而已 呵呵 不能我们就可以利用icefire的方法,用拦截器来判断sessionID来解决问题了
8 楼 itea 2007-05-27  
icefire的方法我想到过,
但是这个方法有个问题,
如果用户的session是因为超时而自动失效的话,它还是会留在那个map中,这样用户一多的话就吃内存。
可能,在可以接受的范围内。

to kyvin, webWork没有取到request的方法么?有的话可以从request上取session. HttpSession有getSession()方法。
7 楼 kyvin 2007-05-26  
icefire 写道
自己把sessionID取出来,和用户ID绑定,比如放到一个Map中,用户ID做Key。等到第二次登录的时候就查有没有这个Key,有就强制前一个session失效。
楼上的所说 我在做jsp的时候会利用这种思路来解决,每次登录自动生成一个码来区分,但是现在在处理webwork时,session内型为
map,而且似乎webwork中的session与对象绑定,并且似乎没有更好的法子获取到sessionID 难道把这个session 转化为 httpsession?~

现在的处理方式 用户登录直接 session.put("user",user)
6 楼 icefire 2007-05-26  
自己把sessionID取出来,和用户ID绑定,比如放到一个Map中,用户ID做Key。等到第二次登录的时候就查有没有这个Key,有就强制前一个session失效。
5 楼 itea 2007-05-26  
可以这样做,
A用户第一次登陆用sessionA,
然后第二次登陆的时候用了sessionB,这个时候,就要使sessionA失效,
这样,就能起到一个用户只能在一台机器上登陆的效果,
当然,用户的每一次操作需要服务端检查它的session。

目前问题是如何在其他回话取到sessionA,并使它失效,我也在寻找这样的方法。貌似servletAPI没有提供。
4 楼 kyvin 2007-05-26  
这个想法我早有了 可是webwork的session的ID能获取到~?或许在我学习中有漏过 能否详细下说明 谢谢
3 楼 qqbuilder 2007-05-25  
kyvin 写道
我的效果就是能否把我那两个存在的问题解决最好 否则也只能退而求其次来利用字段直接封掉
记录sessionID即可
2 楼 kyvin 2007-05-25  
我的效果就是能否把我那两个存在的问题解决最好 否则也只能退而求其次来利用字段直接封掉
1 楼 itea 2007-05-25  
我们公司也在做类似的实现
比你的稍微复杂一点,
我们是一个统一用户管理系统管理其他子系统的用户账号和权限,
在子系统登陆时到用户管理系统去验证。

我也用了类似一个字段这样的方式。

不过我不知道楼主要做的是想要到达一个什么样的效果?

相关推荐

    webwork 登录逻辑验证(简单)

    在WebWork中,登录过程通常涉及到以下几个步骤: 1. **请求处理**:当用户尝试登录时,他们通常会填写包含用户名和密码的表单并提交。这个请求会被Web服务器接收,然后转发到WebWork框架。 2. **Action映射**:...

    webwork中文帮助文档

    在WebWork框架中,模型(Model)负责处理业务逻辑,视图(View)负责展示数据,控制器(Controller)则协调模型和视图,处理用户的请求。这种架构使得代码组织清晰,易于维护和扩展。 1. **安装与配置**: - ...

    webwork中文参考手册

    在学习过程中,除了阅读手册,还建议动手实践,结合实际项目加深理解,以便更好地应用WebWork框架解决实际问题。此外,了解WebWork的进化历程和它如何与Struts2等其他框架融合也很有帮助,因为这能让你了解框架的...

    webwork中文 webwork中文参考 webwork中文资料 webwork学习资料

    WebWork中的Action是处理客户端请求的关键组件,负责业务逻辑的执行。Action可以是Field-Driven或Model-Driven两种类型,前者允许直接访问Action实例的字段,后者则要求通过getter和setter方法来访问。ActionContext...

    webwork2.17中文使用手册

    webwork2.17中文使用手册

    webwork2中文教程

    在本教程中,我们将深入探讨WebWork2的核心概念、功能及其在实际开发中的应用。 WebWork2是Struts的前身,它在Struts的基础上进行了很多改进,比如更强大的动作映射、类型安全的参数绑定以及更优秀的异常处理机制。...

    WebWork中文文档

    - **Action**:这是WebWork框架中的主要组件,用于处理用户的请求并返回响应。一个Action类通常包含一个或多个执行方法,这些方法负责业务逻辑的实现。 - **Interceptor**:拦截器是在Action执行前后运行的一段代码...

    webwork中文文档

    1. **配置WebWork**:首先,需要在项目的web.xml中配置WebWork的监听器,并在WebWork的配置文件中定义Action和拦截器。 2. **编写Action类**:创建Action类并实现相应的业务逻辑。 3. **配置拦截器**:根据需要选择...

    WEBWORK

    WebWork 是一个基于 Java 的开源 MVC(Model-View-Controller)框架,它在早期的 Web 应用开发中非常流行,尤其是在 Struts 1 之前。WebWork 提供了强大的动作(Action)处理、类型转换、拦截器(Interceptor)机制...

    webwork中上传文件

    在本例中,我们关注的是使用WebWork框架在Java环境中实现文件上传。WebWork是一个轻量级的MVC(Model-View-Controller)框架,它提供了处理HTTP请求和响应的强大工具,包括文件上传。 首先,我们需要了解WebWork的...

    webwork2中文参考

    webwork2中文参考

    webwork登录的实例

    这个实例是关于如何在WebWork框架下实现用户登录功能的。 首先,我们需要了解WebWork的核心概念。WebWork的核心思想是将业务逻辑、数据模型和用户界面进行解耦,通过Action(控制器)、Model(模型)和JSP(视图)...

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    4. **异常处理**:WebWork提供了统一的异常处理机制,可以捕获并处理运行时的异常,同时提供了友好的错误页面展示,增强了用户体验。 5. **国际化支持**:WebWork1.4内置了对多语言的支持,通过资源包可以轻松实现...

    WebWork_开发指南

    - **Action 驱动模式**:WebWork 支持 Action 驱动模式,即用户提交表单时,框架能够自动将表单数据映射到 Action 对象中对应的方法参数上,从而简化了数据绑定的过程。 - **XWork 拦截器体系**:XWork 提供了一套...

    webwork2中文文档

    8. **测试与调试**:提供关于单元测试、集成测试和调试WebWork2应用的方法,可能包括JUnit和Mockito的使用。 9. **最佳实践与性能优化**:分享一些开发WebWork2应用的最佳实践,以及如何优化应用程序性能,如减少...

    webwork+spring整合例子 内带使用说明 以及webwork文档(中文)

    而“webwork文档(中文)”则提供了关于WebWork框架的详细信息,对于理解WebWork的工作原理和如何利用其功能至关重要。 总的来说,这个压缩包提供了一个学习和实践WebWork和Spring整合的绝佳资源。通过研究这个例子...

    webwork_框架文档

    `Interceptor`是WebWork中的另一个关键概念,它允许在Action执行前后插入自定义逻辑,例如验证、日志记录、性能监控等。 WebWork的类型转换功能是其一大亮点,它可以自动将HTTP请求参数转换为Action类的属性类型,...

    webwork 中文API

    2. **Action**:在WebWork中,Action是核心组件,它代表了用户的一个操作。Action类包含业务逻辑,并且可以通过执行特定方法(通常为execute())来响应HTTP请求。 3. **ActionContext**:这是一个全局上下文对象,...

    WebWork2.0讲解说明

    2. Action:Action是WebWork2.0中的控制器组件,负责处理用户的请求,执行相应的业务逻辑,并返回结果到视图。 3. Interceptors(拦截器):拦截器是WebWork2.0的一个强大功能,允许在Action调用前后插入自定义逻辑...

    webwork 2.2.6中文文档

    webwork 2.2.6 中文版本,然后编译生成chm格式,方面查看。

Global site tag (gtag.js) - Google Analytics