springboot整合mybatis-plus,shiro,swagger
springboot整合mybatis-plus,shiro,swagger
- springboot整合mybatis-plus
- springboot整合swagger
- springboot整合shiro
环境:jdk1.8,IDEA,mysql5.6
工程结构:
项目已传到github
https://github.com/yuld/springboot-shiro-mybatisplus-swagger2.git
1 mybatis-plus对mybatis做了增强,上手简单,加快开发效率
官网地址:https://mp.baomidou.com/
官网首页是在这样介绍的:
1.1 建表
CREATE TABLE `t_user` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `USERNAME` varchar(50) DEFAULT NULL, `PASSWORD` varchar(50) DEFAULT NULL, `EMAIL` varchar(20) DEFAULT NULL, `CREATETIME` timestamp NULL DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
插入一些数据
1.2 创建springboot项目并添加依赖,其中lombok是一款插件,需要下载然后添加依赖,使用它的注解可以省去get/set方法,若不使用则显式生成get/set方法,具体使用请查阅相关资料。
<!-- mybatisplus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>2.3</version> </dependency> <!-- druid连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version> </dependency> <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.15</version> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> <scope>provided</scope> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
1.3创建实体类
package com.dbzq.entity; import com.baomidou.mybatisplus.annotations.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import java.util.Date; @TableName("t_user") @Data @EqualsAndHashCode(callSuper = false) public class User { private Integer id; private String username; private String password; private String email; private Date createtime; }
1.4创建UserMaper
package com.dbzq.springboot.mapper; import com.dbzq.springboot.entity.User; import com.baomidou.mybatisplus.mapper.BaseMapper; public interface UserMapper extends BaseMapper<User> { }
1.5创建UserService和UserServiceImpl
UserService:
package com.dbzq.springboot.service; import com.dbzq.springboot.entity.User; import com.baomidou.mybatisplus.service.IService; public interface UserService extends IService<User> { }
UserServiceImpl:
package com.dbzq.springboot.service.impl; import com.dbzq.springboot.entity.User; import com.dbzq.springboot.mapper.UserMapper; import com.dbzq.springboot.service.UserService; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { }
1.6创建UserController,做一个简单的根据ID查询用户
package com.dbzq.springboot.controller; import com.dbzq.springboot.entity.User; import com.dbzq.springboot.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController public class UserController { @Autowired private UserService service; @GetMapping("/user/{id}") public User findUserById(@PathVariable("id") Integer id){ User user = service.selectById(id); return user; } }
1.7配置文件
server.port=9090 server.servlet.context-path=/dbzq #mysql spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource #mybatis-plus: mybatis-plus.mapper-locations=classpath:mybatis/mapper/*.xml mybatis-plus.type-aliases-package=com.dbzq.springboot.entity #开启驼峰命名规则 mybatis-plus.global-config.db-column-underline=true #控制台打印sql输出 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl #jackson,返回json的时间格式 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
启动项目访问:
测试成功,MP整合完成!
mpbatis-plus有很多强大的功能,比如条件构造器和代码生成器,相应的代码请从文章开头的github连接下载
2 swagger:接口的文档在线自动生成,方便接口调试
2.1 添加依赖,不同版本生成的文档界面有所不同
<!-- swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.8.0</version> </dependency>
2.2 配置swagger
package com.dbzq.springboot.config.swagger; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.dbzq.springboot.controller")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("接口文档") .description("在此页面做接口测试") .version("1.0.0") .build(); } }
2.3 在刚才的controller方法上添加
**@ApiOperation(value="根据id查看用户", notes="根据id查看用户")** @GetMapping("/user/{id}") public User findUserById(@PathVariable("id") Integer id){ User user = service.selectById(id); return user ; }
2.4 启动项目,访问:http://localhost:9090/dbzq/swagger-ui.html
找到根据id查询用户接口,点击Try it out
输入id=1查询得到:
swagger整合完成
3 shiro,认证授权框架,这里整合后只是简单的完成了认证功能,授权功能没有加上
3.1添加依赖
<!-- shiro --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.3.2</version> </dependency>
3.2 自定义relam
package com.dbzq.springboot.shiro; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.dbzq.springboot.entity.User; import com.dbzq.springboot.service.UserService; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import org.springframework.beans.factory.annotation.Autowired; public class UserRealm extends AuthorizingRealm { @Autowired private UserService userService; /** * 认证 * @param token * @return * @throws AuthenticationException */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { //得到用户名 String username = (String) token.getPrincipal(); Wrapper<User> wrapper = new EntityWrapper<User>(); wrapper.eq("username", username); User user = userService.selectOne(wrapper); if(user==null){ return null; } String password = user.getPassword(); //盐,未添加 //String salt = user.getSalt(); SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo( user, password,null, this.getName()); return simpleAuthenticationInfo; } /** * 授权 * @param principals * @return */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { return null; } }
3.3 shiro配置类
package com.dbzq.springboot.config.shrio; import com.dbzq.springboot.shiro.UserRealm; import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.LinkedHashMap; import java.util.Map; @Configuration public class ShrioConfig { /** * 自定义的realm * @return */ @Bean public UserRealm myShiroRealm() { UserRealm userRealm = new UserRealm(); return userRealm; } /** * 安全管理器 * @return */ @Bean public DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(myShiroRealm()); return securityManager; } /** * 过滤链 * @param securityManager * @return */ @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); Map<String,String> map = new LinkedHashMap<>(); //登出 map.put("/logout","logout"); //登录请求不拦截 map.put("/login","anon"); //swagger页面不拦截 map.put("/swagger-ui.html", "anon"); map.put("/webjars/**", "anon"); map.put("/v2/**", "anon"); map.put("/swagger-resources/**", "anon"); //拦截所有 map.put("/**","authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(map); return shiroFilterFactoryBean; } }
3.4 LoginController:
package com.dbzq.springboot.controller; import com.dbzq.springboot.entity.User; import com.dbzq.springboot.utils.JsonMessage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.IncorrectCredentialsException; import org.apache.shiro.authc.UnknownAccountException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.Subject; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; /** * @author yuld */ @RestController @Api(value="LoginController",tags={"登录相关接口"}) public class LoginController { @ApiOperation(value="登录", notes="需要用户名loginacct和密码userpswd") @PostMapping("/login") public JsonMessage login(User user) { JsonMessage message = new JsonMessage(); Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(),user.getPassword()); try { //没有异常则登录成功 subject.login(token); message.setSuccess(true); } catch (UnknownAccountException e) { message.setSuccess(false); e.printStackTrace(); }catch (IncorrectCredentialsException e) { message.setSuccess(false); e.printStackTrace(); } return message; } }
3.5 启动项目到swagger进行测试,输入错误的密码
后台报错:认证未通过
输入不存在的用户名:
shiro整合完毕!
该文章只贴出了部分关键的代码,完整的工程请到github下载
https://github.com/yuld/springboot-shiro-mybatisplus-swagger2.git
若出现错误或者代码有不合理的地方请在评论留言!
- Spring boot+Shiro+ spring MVC+swagger UI +Mybatis+mysql+Vue +Element UI 之一vue和spring boot整合
- Spring boot+Shiro+ spring MVC+swagger UI +Mybatis+mysql+Vue +Element UI 之四 vue 整合Element UI
- Spring boot+Shiro+ spring MVC+swagger UI +Mybatis+mysql+Vue +Element UI 之四 vue 整合Element UI
- 采用shardbatis在springBoot中实现表的水平拆分,整合swagger,mybatis,shardbatis,pagehelper
- 基于springboot+mybatisplus+shiro+dubbo+layuicms2.0搭建权限管理系统
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- Spring Boot整合Mybatis-Plus和PageHelper分页插件,附项目源码
- SpringBoot +shiro+mybatis plus+spring +redis
- 基于SpringBoot从零构建博客网站 - 整合lombok和mybatis-plus提高开发效率
- Spring boot 和 mybatis-plus基础整合
- spring boot 整合springMVC+mybatis+swagger过程记录
- SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架
- Spring boot+Shiro+ spring MVC+swagger UI +Mybatis+mysql+Vue +Element UI 之三 vue简单页面实战
- SpringBoot整合MybatisPlus
- springboot+shiro+mybatis整合发现部分功能事务没有被spring管理
- springboot整合com.baomidou.mybatisplus出现ID参数类型不匹配的问题
- 基于SpringBoot的Mybatis-Plus插件整合
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- SpringBoot整合mybatis-plus入门
- SpringBoot整合mybatisplus