CAS单点登录问题

wdr1007 2013-08-12 08:57:11
最近公司开发一个项目,采用基于CAS的单点登录,基本框架已经搭建好,能顺利登录和登出,但登录时会时不时出现第一次输入用户名和密码不跳转的问题,要输入第二遍才能跳转。求教是什么原因导致这个问题,会不会是重写preHandle方法的问题,还是过滤器或者拦截器的设置有问题?
...全文
220 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
perior 2013-08-12
  • 打赏
  • 举报
回复
把代码拿出来看看
wdr1007 2013-08-12
  • 打赏
  • 举报
回复
引用 8 楼 yxfei666 的回复:
DeBug 是有时间的,直接运行时间很短,看看你的Session设置的时长是多少?
session使用的是默认的配置,应该跟session时长无关吧。而且现在出现这种状况很频繁,要输入第二遍才能顺利跳转。第一遍输入后,地址栏没变化,网络通信数据也没有。
wdr1007 2013-08-12
  • 打赏
  • 举报
回复
引用 9 楼 rihaduo202 的回复:
不能跳转,有什么提示么? 浏览器是什么状态? 一直加载还是? 手上项目也要做这个,正在学习中。 话说你的CAS版本是多少? 是最新的么? 最新的我配了测试还能跑,服务器还没关联。
是最新的版本。 使用firefox,不能跳转后无任何提示,状态是加载完毕。 需要重新输入一遍用户名和密码才能跳转成功。请问有遇到这类似的情况吗?
rihaduo202 2013-08-12
  • 打赏
  • 举报
回复
不能跳转,有什么提示么? 浏览器是什么状态? 一直加载还是? 手上项目也要做这个,正在学习中。 话说你的CAS版本是多少? 是最新的么? 最新的我配了测试还能跑,服务器还没关联。
perior 2013-08-12
  • 打赏
  • 举报
回复
DeBug 是有时间的,直接运行时间很短,看看你的Session设置的时长是多少?
wdr1007 2013-08-12
  • 打赏
  • 举报
回复
引用 5 楼 ITbasketplayer 的回复:
你的逻辑有问题,null!=request.getSession().getAttribute("user")的时候呢?你return true;并没有跳转,这就是你描述的问题所在。
修改了代码,发现并不是return true;的问题。如果直接返回false,登出就无效了。还是不行呢,头痛啊
  • 打赏
  • 举报
回复
sorry,你的是拦截器!
  • 打赏
  • 举报
回复
你的逻辑有问题,null!=request.getSession().getAttribute("user")的时候呢?你return true;并没有跳转,这就是你描述的问题所在。
wdr1007 2013-08-12
  • 打赏
  • 举报
回复
那这个问题是什么原因产生的呢?有时直接跳转,有时需要输入两遍,这样肯定不行的。我能力有限,求大神帮帮忙
perior 2013-08-12
  • 打赏
  • 举报
回复
那就表示问题不是出在拦截器上面
wdr1007 2013-08-12
  • 打赏
  • 举报
回复
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
		HandlerMethod handlerMethod = (HandlerMethod) obj;  
		logger.info("preHandle - method - "+handlerMethod.getMethod());  
		String requestUri = request.getRequestURI();
		logger.info("request uri - "+requestUri);
		if (null==request.getSession().getAttribute("user")){
			AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();

			if (null!=principal){
				String uid = principal.getName();//获取用户名
				if ((null!=uid)&&(!"".equals(uid))){
					UserDto userDto = new UserDto();
					userDto.setId(Integer.parseInt(uid));
					userDto =userService.getUser(userDto);
					if (null!=userDto){
						request.getSession().setAttribute("user", userDto);
						logger.info(uid+"登录成功");
						return true;
					}
				}else {
					logger.info("error:==========loginName is empty!");
				}
			}else{
				logger.info("==========principal is null!");
			}
		}else {
			return true;
		}
		return false;
	}
preHandle方法,如果在这个方法打上断点,每次登陆就不会出现问题,但只要不打断点,就会出现我之前描述的问题,求大神指点一二,是因为代码问题还是其他的配置出了问题。

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧