如何在Spring boot加入shiro支持
这篇文章主要介绍了如何在Springboot加入shiro支持,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
在项目添加依赖
org.apache.shiro shiro-spring 1.4.0 org.apache.shiro shiro-core 1.4.0
配置文件目录下新建spring文件夹,在文件夹内新建spring-shiro.xml文件
/statics/**=anon /login=anon /**=authc
在主入口加载spring-shiro.xml
@ImportResource({"classpath:spring/spring-shiro.xml"})
在登录Controller内更改成
//构造登录参数 UsernamePasswordTokentoken=newUsernamePasswordToken(name,pwd); try{ //交给Realm类处理 SecurityUtils.getSubject().login(token); }catch(UnknownAccountExceptionuae){ map.put("msg","未知用户"); return"login"; }catch(IncorrectCredentialsExceptionice){ map.put("msg","密码错误"); return"login"; }catch(AuthenticationExceptionae){ //unexpectedcondition?error? map.put("msg","服务器繁忙"); return"login"; } return"redirect:/toIndex";
看5行就知道登录交给了Realm类处理了,所以我们要有Realm类
在可以被主入口扫描到的地方新建AuthRealm类并且继承AuthorizingRealm,重写doGetAuthenticationInfo(登录逻辑),重写doGetAuthorizationInfo(授权逻辑)
importorg.apache.shiro.authc.AuthenticationException; importorg.apache.shiro.authc.AuthenticationInfo; importorg.apache.shiro.authc.AuthenticationToken; importorg.apache.shiro.authz.AuthorizationInfo; importorg.apache.shiro.realm.AuthorizingRealm; importorg.apache.shiro.subject.PrincipalCollection; publicclassAuthRealmextendsAuthorizingRealm{ @Override protectedAuthenticationInfodoGetAuthenticationInfo(AuthenticationTokentoken)throwsAuthenticationException{ //TODOAuto-generatedmethodstub returnnull; } @Override protectedAuthorizationInfodoGetAuthorizationInfo(PrincipalCollectionprincipals){ //TODOAuto-generatedmethodstub returnnull; } }
登录验证在doGetAuthenticationInfo方法写入
//获取Token UsernamePasswordTokentoken2=(UsernamePasswordToken)token; //获取用户名 StringuserName=token2.getUsername(); //获取密码 Stringpwd=newString(token2.getPassword()); //下面我使用的是MyBatis-puls3.0 //查询条件对象 QueryWrapperqueryWrapper=newQueryWrapper(); //查询该用户 queryWrapper.eq("name",userName).or().eq("phone",userName); //查询 Useruser=iUserService.getOne(queryWrapper); //查回的对象为空 if(CommonUtil.isBlank(user)){ //抛出未知的账户异常 thrownewUnknownAccountException(); } //查回的对象密码和输入密码不相等 if(!CommonUtil.isEquals(user.getPwd(),pwd)){ //抛出凭证不正确异常 thrownewIncorrectCredentialsException(); } //上面都通过了就说明该用户存在并且密码相等 //验证成功了 SecurityUtils.getSubject().getSession().setAttribute(Constant.SESSION_USER_KEY,user); //返回shiro用户信息 //token传过来的密码,一定要跟验证信息传进去的密码一致,加密的密码一定要加密后传过来 returnnewSimpleAuthenticationInfo(user,user.getPwd(),getName());
如果要设置权限,就在对应的Controllerf方法加上
@RequiresPermissions("/system/user/list")
再doGetAuthorizationInfo方法内写
//创建简单的授权信息对象 SimpleAuthorizationInfosimpleAuthorizationInfo=newSimpleAuthorizationInfo(); //授予权限 simpleAuthorizationInfo.addStringPermission("/system/user/list"); returnsimpleAuthorizationInfo;
当所有Controller都加了@RequiresPermissions注解后,如果访问到没有授权的Controller会报错。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。