认证的登录操作案例:SpringBoot集成shiro
下面开始使用Shiro实现带认证的登录操作
导入依赖
org.apache.shiro
shiro-core
1.3.2
org.apache.shiro
shiro-web
1.3.2
org.apache.shiro
shiro-spring
1.3.2
第一个demo
基本思路
用户输入的账号密码 和 数据库中存储的账号密码 比对
注意:shiro 默认不支持连接数据库 默认通过配置文件获取数据
所以我们要重写Realm中的方法,实现对数据库的连接
-
接收用户输入的账号密码,
-
要重写Realm中的方法,实现对数据库的连接和数据获取
-
写Springboot的配置类,创建并将重写的Realm设置放进去安全管理器, 将安全管理器 和Subject建立联系
-
将用户输入的账号密码给Subject
-
调用Subject的login方法完成登录
代码实现流程
重写Realm的代码
package com.macw.realm;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.macw.entity.Admin;
import com.macw.mapper.AdminMapper;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.realm.AuthenticatingRealm;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Resource;
/**
-
@author maCw
-
@version 1.0
-
@date 2019/8/22 16:13
*/
public class MyRealm extends AuthenticatingRealm {
@Resource
private AdminMapper adminMapper;
/**
- 记录日志
*/
Logger logger = LoggerFactory.getLogger(getClass());
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
//1,获取令牌中的数据,账号
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
String username = token.getUsername();
//2,通过账号查询获取数据库中对应的账号信息
Admin admin = adminMapper.selectOne(new QueryWrapper().eq(“username”, username));
logger.info(“—”+admin);
Subject subject = SecurityUtils.getSubject();
//将查询的对象放进去subject自带的session中去
subject.getSession().setAttribute(“admins”, admin);
//如果有数据,对象为非null,说明查询到了数据,封装account返回
if (admin != null){
SimpleAccount simpleAccount = new SimpleAccount(admin.getUsername(), admin.getPassword(), this.getName());
return simpleAccount;
}else {
//如果对象为空,return null就会抛出账户不存在异常
return null;
}
}
}
在SpringBoot中配置shiro
package com.macw.config;
import com.macw.realm.MyRealm;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.config.WebIniSecurityManagerFactory;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Map;
/**
- @Configuration 标记当前类为配置类 相当于spring.xml
*/
@Configuration
public class ShiroConfig {
/**
-
@Bean 声明创建对象 并把对象放在工厂中 相当于bean标签
-
如果形参类型对应的对象在工厂中有 会自动装配上
-
@return
*/
@Bean
public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultSecurityManager defaultSecurityManager){
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
/**
- 过滤器链 过滤拦截规则 哪些页面拦截 哪些页面不拦截
*/
Map map = new HashMap();
/**
-
anon 代表匿名可访问 就是不用登录就可以访问 登录页面 登录的url
-
authc 认证可访问 代表登录后才能访问
-
支持通配符*
-
注意拦截规则 一个一个配置
*/
map.put(“/login.jsp”,“anon”);
map.put(“/login/*”,“anon”);
map.put(“/main/*”, “authc”);
map.put(“/guru/*”, “authc”);
map.put(“/menu/*”, “authc”);
shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
/**
- 设置安全管理器,将创建的安全管理器放进shiroFilterFactoryBean过滤工厂里面
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
11006856687)]
[外链图片转存中…(img-6FebRjlw-1711006856688)]
[外链图片转存中…(img-AksG5vPe-1711006856688)]
[外链图片转存中…(img-Q3fRcpsJ-1711006856688)]
[外链图片转存中…(img-QUEZEA6M-1711006856689)]
[外链图片转存中…(img-i24PL2cY-1711006856689)]
[外链图片转存中…(img-KO47TjQw-1711006856689)]
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!