Spring Boot与Shiro和Mybatis整合

1:shiro是什么?
Apache Shiro 是ASF旗下的一款开源软件
shrio是一款强大而灵活的安全框架
可为任何应用提供安全保障— 从命令行应用、移动应用到大型网络及企业应用
2:shiro的四大基石:
认证(Authentication):用户身份识别。有时可看作为“登录”,它是用户证明自己是谁的一个行为。
授权(Authorization):访问控制过程,好比决定“认证谁” 可以访问它”。
会话管理(SessionManagement):管理用户的会话,甚至在没有WEB或EJB容器的环境中。管理用户与时间相关的状态。
加密(Cryptography):使用加密算法保护数据更加安全,防止数据被偷窥。
但此外还有一些附加的功能进行支持和加强比如:
Web支持:利用Shiro的web支持API可以很容易地实现web程序安全;
shiro支持并发
3:介绍完shiro了 让我们开始搭建第一个shiro项目吧
创建一个spring boot项目导入maven依赖:
复制代码

org.apache.shiro
shiro-spring
1.5.3


org.springframework.boot
spring-boot-starter-thymeleaf


org.springframework.boot
spring-boot-starter-web


org.springframework.boot
spring-boot-starter-test
test


org.projectlombok
lombok

复制代码
导入maven环境之后 写一个:UserRealm类来继承AuthorizingRealm并重写它的两个方法
复制代码
public class UserRealm extends AuthorizingRealm {
@Override //授权方法
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
System.out.println(“doGetAuthorizationInfo授权方法执行了”);
return null;
}
//认证方法
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
System.out.println(“doGetAuthenticationInfo认证方法执行了”);
return null;
}


复制代码
重写方法之后配置shiro的配置类:ShrioComfig:
复制代码
@Configuration
public class ShrioComfig {
//第三步:
@Bean
public ShiroFilterFactoryBean Bean(@Qualifier(“defaultWebSecurityManager”) DefaultWebSecurityManager defaultWebSecurityManager){
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
bean.setSecurityManager(defaultWebSecurityManager);
Map<String,String>map=new LinkedHashMap();
map.put("/user/update",“authc”);
map.put("/user/add",“authc”);
bean.setFilterChainDefinitionMap(map);
//设置如果拦截则切换到登录页面
bean.setLoginUrl("/login");
return bean;
}
//第二步:DefaultWebSecurityManager
@Bean
public DefaultWebSecurityManager defaultWebSecurityManager(@Qualifier(“userRealm”) UserRealm userRealm){
DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
defaultWebSecurityManager.setRealm(userRealm);
return defaultWebSecurityManager;
}
//第一步:创造realm对象 需要自定义类
@Bean
public UserRealm userRealm(){
return new UserRealm();
}
}
复制代码
然后再写一个控制层:MyController:
复制代码
@Controller
public class MyController {
@RequestMapping({"/","/index"})
public String toIndex(Model model){
model.addAttribute(“msg”,“hello Shrio!”);
return “index”;
}
@RequestMapping("/user/add")
public String goadd(){
return “/user/add”;
}
@RequestMapping("/user/update")
public String update() {
return “/user/update”;
}
复制代码

在templates包中写一个首页(index)页面:
复制代码

Title

首页

add update 复制代码 在templates中添加一个user包然后写两个add和update页面: add: 复制代码 Title

add

复制代码

update:
复制代码

Title

update

复制代码

开启测试:如果点进链接可以进去
那么我们的第一个shiro项目就完成了

那么我们开启进阶的第一步把 spring boot整合shiro和mybatis
第一步导入依赖:
复制代码

log4j
log4j
1.2.17


com.alibaba
druid
1.2.4


mysql
mysql-connector-java


org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.4


org.apache.shiro
shiro-spring
1.5.3


org.springframework.boot
spring-boot-starter-thymeleaf


org.springframework.boot
spring-boot-starter-web


org.springframework.boot
spring-boot-starter-test
test


org.projectlombok
lombok

复制代码
 配置application.yaml文件和application.properties:
application.properties:
mybatis.type-aliases-package=com.kuang.pojo
application.yaml:
复制代码
spring:
datasource:
username: root
password: 5825600
#填写你的mysql密码和账户
#?serverTimezone=UTC解决时区的报错
url: jdbc:mysql://localhost:3306/luyunjie?useSSL=false&useUnicode=false&characterEncoding=UTF-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#Spring Boot 默认是不注入这些属性值的,需要自己绑定
#druid 数据源专有配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
复制代码
配置完环境 我们配置mybatis的实现类User:
属性跟你的mysql数据库的字段对应
复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String loginName;
private String loginPwd;
}
复制代码
写出UserMapper接口:
复制代码
@Repository
@Mapper
public interface UserMapper {
@Select(“select * from t_user where loginName=#{loginName}”)
//不建议用注解 因为有些情况太复杂的sql编写不了
public User getuser(String loginName);
}
复制代码
  再写一个业务层UserSverice:
public interface UserService {
public User getuser(String loginName);
}
  再写UserSverice的实现类:
复制代码
@Service
public class UserServiceImp implements UserService {
@Autowired
UserMapper userMapper;
@Override
public User getuser(String loginName) {
return userMapper.getuser(loginName);
}
}
复制代码
  去ShrioApplicationTests测试类一下:
复制代码
@SpringBootTest
class ShrioApplicationTests {
@Autowired
UserServiceImp userServiceImp;
@Test
void contextLoads() {
System.out.println(userServiceImp.getuser(“lyj”));
}
}
复制代码
  如果可以查询到数据库数据就证明你的环境配好了:

那么我们的可以去进行连接数据库的操作了

来提个要求 如果没有登录点击add和update就要登录才能进入:
第一步:
  在MyController中添加一个返回登录页面的和获得当前用户并封装和返回异常的方法:
复制代码
@RequestMapping("/login")
public String login() {
return “/login”;
}
@RequestMapping("/tologin")
public String login(String username,String password,Model model) {
//获取当前的用户
Subject subject = SecurityUtils.getSubject();
//封装当前用户的数据
UsernamePasswordToken user=new UsernamePasswordToken(username,password);
try{
subject.login(user);
return “index”;
}catch (UnknownAccountException e){
model.addAttribute(“msg”,“账户错误”);
return “login”;
}catch (IncorrectCredentialsException e){
model.addAttribute(“msg”,“密码错误”);
return “login”;
}
}
复制代码

第二步:
  在templates写出一个登录(login)页面:
复制代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程简介:历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring BootSpring MVC、MybatisMybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值