将shiro作为应用的权限基础二基于springmvc实现的认证过程

将shiro作为应用的权限基础二基于springmvc实现的认证过程

ID:9023842

大小:205.50 KB

页数:10页

时间:2018-04-15

将shiro作为应用的权限基础二基于springmvc实现的认证过程_第1页
将shiro作为应用的权限基础二基于springmvc实现的认证过程_第2页
将shiro作为应用的权限基础二基于springmvc实现的认证过程_第3页
将shiro作为应用的权限基础二基于springmvc实现的认证过程_第4页
将shiro作为应用的权限基础二基于springmvc实现的认证过程_第5页
资源描述:

《将shiro作为应用的权限基础二基于springmvc实现的认证过程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、将Shiro作为应用的权限基础二:基于SpringMVC实现的认证过程认证就是验证用户身份的过程。在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法。最常见的“实体/凭证”组合便是“用户名/密码”组合。 一、认证过程 1、收集实体/凭据信息 UsernamePasswordTokentoken=newUsernamePasswordToken(username,password);token.setRememberMe(true);UsernamePasswordToken支持最常见的用户名/密码的认证机制。同时,由于它

2、实现了RememberMeAuthenticationToken接口,我们可以通过令牌设置“记住我”的功能。 但是,“已记住”和“已认证”是有区别的: 已记住的用户仅仅是非匿名用户,你可以通过subject.getPrincipals()获取用户信息。但是它并非是认证通过的用户,当你访问需要认证用户的功能时,你仍然需要重新提交认证信息。 这一区别可以参考淘宝网站,网站会默认记住登录的用户,再次访问网站时,对于非敏感的页面功能,页面上会显示记住的用户信息,但是当你访问网站账户信息时仍然需要再次进行登录认证。 2、提交实体/凭据信息 SubjectcurrentUser=Securit

3、yUtils.getSubject();currentUser.login(token);收集了实体/凭据信息之后,我们可以通过SecurityUtils工具类,获取当前的用户,然后通过调用login方法提交认证。 3、认证如果我们自定义Realm实现,比如我后面的例子中,自定义了ShiroDbRealm类,当执行currentUser.login(token)时,会先执行ShiroDbRealm.doGetAuthorizationInfo()进行认证。/***验证当前登录的Subject*@see经测试:本例中该方法的调用时机为*LoginController.login()方

4、法中执行Subject.login()时*/protectedAuthenticationInfodoGetAuthenticationInfo(AuthenticationTokenauthcToken)throwsAuthenticationException{//获取基于用户名和密码的令牌//实际上这个authcToken是从LoginController里面currentUser.login(token)传过来的UsernamePasswordTokentoken=(UsernamePasswordToken)authcToken;//从数据库中查询用户用信息Useruse

5、r=userService.getByAccount(token.getUsername());if(user!=null){//此处无需比对,比对的逻辑Shiro会做,//我们只需返回一个和令牌相关的正确的验证信息returnnewSimpleAuthenticationInfo(user.getAccount(),user.getPassword(),getName());}else{//没有返回登录用户名对应的SimpleAuthenticationInfo对象时,//就会在LoginController中抛出UnknownAccountException异常returnnu

6、ll;}}4、认证处理 try{currentUser.login(token);}catch(UnknownAccountExceptionuae){...}catch(IncorrectCredentialsExceptionice){...}catch(LockedAccountExceptionlae){...}catch(ExcessiveAttemptsExceptioneae){...}...catchyourown...}catch(AuthenticationExceptionae){//unexpectederror?}如果login方法执行完毕且没有抛出任何异

7、常信息,那么便认为用户认证通过。之后在应用程序任意地方调用SecurityUtils.getSubject()都可以获取到当前认证通过的用户实例,使用subject.isAuthenticated()判断用户是否已验证都将返回true. 相反,如果login方法执行过程中抛出异常,那么将认为认证失败。Shiro有着丰富的层次鲜明的异常类来描述认证失败的原因,如代码示例。 二、登出操作 登出操作可以通过调用subject.logout()来删除你的登录信息,如: cur

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。