NutzCN Logo
问答 shiro如何整合多种登录验证方式呢?
发布于 2460天前 作者 qq_a930202f 4746 次浏览 复制 上一个帖子 下一个帖子
标签:

常用的是表单登录,
如果要加一个,用户输入一个字符串编码,就可以达到登录的目的。
需要新增或修改哪些部分?

14 回复

如果用SimpleShiroToken的话,登录逻辑都在入口方法内进行,shiro仅提供权限相关的功能

如果不是,那得为不同的登录方式设计不同的token类型,然后写对应的realm

是相当于同一个用户,可以用不同方式登陆

还有就是比如有两种登录方式a和b,如果用户先用a方式登录,再用b方式登录,需要把之前的a方式登录踢掉

那是要踢出前一个登录回话呗,搜 踢出登录 一堆帖子

@wendal
一种登录方式是类似oauth回调的方法,一旦回调成功即认为登录成功,不进行验证。然后授权。
这种情况,应该自定义shiro的哪些部分来处理呢?

为啥就不用SimpleAuthToken呢?

@admin 不知道这个SimpleAuthToken,怎么一个大概的使用流程?

是指的SimpleAccount吗?

不是, 就是SimpleAuthToken

说错,是 org.nutz.integration.shiro.SimpleShiroToken

由入口方法完成登录验证, 然后构建SimpleShiroToken,仅传递用户id, 然后调用shiro的login

不让shiro参与密码/字符串的校验.

多谢指导,研究研究

@wendal
看nutz-book-project 3.x代码,其中登陆部分

@POST
	@Ok("json")
	@At
	@Slog(tag="用户登录", after="用户[${username}] ok=${re.ok}")
	public Object login(@Param("username")String username, 
					  @Param("password")String password,
					  @Param("rememberMe")boolean rememberMe,
					  @Param("captcha")String captcha) {
		 ....
		 ..
		// 检查用户名密码
		User user = dao.fetch(User.class, username);
		if (user == null) {
			return re.setv("msg", "用户不存在"); // TODO: 改成 用户名/密码不正确
		}
		// 比对密码
		if (!userService.checkPassword(user, password)) {
			return re.setv("msg", "密码错误");
		}
		
		Toolkit.doLogin(new SimpleShiroToken(user.getId()), user.getId());
		
		subject.getSession().setAttribute("me", user);
		return re.setv("ok", true);
	}

没用使用FormAuthenticationFilter的过滤器模式做验证?
那nutz-integration-shiro里的CaptchaUsernamePasswordToken是不是就没有用到?

其他那些token类还得查密码,在realm各种校验,用SimpleShiroToken只带用户id,直接完成shiro的登录流程,至于密码/字符串等校验,在入口方法完成

添加回复
请先登陆
回到顶部