SpringBoot 整合 Shiro 密码登录的实现代码
导入依赖(pom.xml)
org.apache.shiro shiro-spring 1.4.0 com.auth0 java-jwt 3.2.0
创建ShiroConfig配置类
@Configuration publicclassShiroConfig{ /** *ShiroFilterFactoryBean */ @Bean publicShiroFilterFactoryBeangetShiroFilterFactoryBean(@Qualifier("securityManager")DefaultWebSecurityManagerdefaultWebSecurityManager){ ShiroFilterFactoryBeanfactoryBean=newShiroFilterFactoryBean(); //设置安全管理器 factoryBean.setSecurityManager(defaultWebSecurityManager); //添加shiro的内置过滤器 /* *anon:无需认证就可以访问 *authc:必须认证才能访问 *user:必须拥有记住我功能才能用 *perms:拥有对某个资源的权限能访问 *role:拥有某个角色权限能访问 */ MapfilterMap=newLinkedHashMap<>(); //放行不需要权限认证的接口 //放行登录接口 filterMap.put("/login/**","anon"); //放行用户接口 filterMap.put("/","anon");//网站首页 //认证管理员接口 filterMap.put("/administrators/**","authc"); factoryBean.setFilterChainDefinitionMap(filterMap); //设置无权限时跳转的url //设置登录的请求 factoryBean.setLoginUrl("/login/toLogin"); returnfactoryBean; } /** *注入DefaultWebSecurityManager */ @Bean(name="securityManager") publicDefaultWebSecurityManagergetDefaultWebSecurityManager(@Qualifier("customRealm")CustomRealmcustomRealm){ DefaultWebSecurityManagersecurityManager=newDefaultWebSecurityManager(); //关联CustomRealm securityManager.setRealm(customRealm); returnsecurityManager; } /** *注入securityManager */ @Bean publicCustomRealmcustomRealm(){ returnnewCustomRealm(); } }
创建密码登录时验证授权CustomRealm类
@Component publicclassCustomRealmextendsAuthorizingRealm{ @Autowired AdministratorsServiceadministratorsService; /* *设置加密方式 */ { HashedCredentialsMatchermather=newHashedCredentialsMatcher(); //加密方式 mather.setHashAlgorithmName("md5"); //密码进行一次运算 mather.setHashIterations(512); this.setCredentialsMatcher(mather); } /** *授权 */ @Override protectedAuthorizationInfodoGetAuthorizationInfo(PrincipalCollectionprincipals){ System.out.println("————授权————doGetAuthorizationInfo————"); returnnull; } /** *认证 */ @Override protectedAuthenticationInfodoGetAuthenticationInfo(AuthenticationTokentoken)throwsAuthenticationException{ System.out.println("————认证————doGetAuthenticationInfo————"); UsernamePasswordTokenuserToken=(UsernamePasswordToken)token; //连接数据库查询用户数据 QueryWrapperwrapper=newQueryWrapper<>(); wrapper.eq("username",userToken.getUsername()); Administratorsadministrators=administratorsService.getOne(wrapper); if(administrators==null){ returnnull;//抛出异常UnknownAccountException } //密码认证,shiro做 returnnewSimpleAuthenticationInfo("",administrators.getPassword(),""); } }
控制层用户密码登录
//用户名登录 @ApiOperation(value="管理员登录",notes="用户名登录--不进行拦截") @PostMapping("/doLogin") publicStringdoLogin(@RequestParam("username")Stringusername, @RequestParam("password")Stringpassword, HttpSessionsession,Modelmodel){ //获取当前的用户 Subjectsubject=SecurityUtils.getSubject(); //封装用户的登录数据 UsernamePasswordTokentoken=newUsernamePasswordToken(username,password); try{ subject.login(token); //保存session会话管理员名字 session.setAttribute("adname",username); return"admin"; }catch(UnknownAccountExceptione){ model.addAttribute("usererror","用户名错误!请重新输入。"); return"login"; }catch(IncorrectCredentialsExceptionice){ model.addAttribute("pwerror","密码错误!请重新输入。"); return"login"; } }
到此这篇关于SpringBoot整合Shiro密码登录的实现代码的文章就介绍到这了,更多相关SpringBoot整合Shiro密码登录内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。