5
回答
Shiro的session问题
百度AI开发者大赛带你边学边开发,赢100万奖金,加群:418589053   
通过HttpServletRequest获取到Session后向里面setAttribute了一个属性(内容是4位字符串,做验证码功能),可是从Shiro的Session中取出的时候得到的是一串32位的字符串,如何解决呢
举报
发帖于2年前 5回/385阅
共有5个答案 最后回答: 2年前
 

下面的是通过shiro验证

// 校验登录验证码
if (LoginController.isValidateCodeLogin(token.getUsername(), false, false)){
	Session session = null;
  try{
			Subject subject = SecurityUtils.getSubject();
			Session session = subject.getSession(false);
			if (session == null){
				session = subject.getSession();
			}
		}catch (InvalidSessionException e){
			
		}
	String code = (String)session.getAttribute(ValidateCodeServlet.VALIDATE_CODE);
	if (token.getCaptcha() == null || !token.getCaptcha().toUpperCase().equals(code)){
		throw new AuthenticationException("msg:验证码错误, 请重试.");
	}
}

下面是写入验证码

/* * 生成字符
*/
private void createImage(HttpServletRequest request,
 HttpServletResponse response) {
  String s = createCharacter(g);
  request.getSession().setAttribute(VALIDATE_CODE, s);
}




Subject subject = SecurityUtils.getSubject();
            Session session = subject.getSession(false);
            if(session ==null){
                session = subject.getSession();
            }


这几行直接用 session = subject.getSession();试试?

--- 共有 1 条评论 ---
还是不行... 2年前 回复

我估计这项目你是半截开发的吧,或者是用别人的demo修改的?   你看看你shiro的session的xml配置有没有添加加密的配置?

估计能解决你的问题  

--- 共有 1 条评论 ---
嗯嗯 好的 我再多看看 2年前 回复
顶部