如何在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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。