springboot整合shiro框架
1、整合框架流程图
1、这里的需要添加一个配置过滤器,shiroFilter可拦截springboot中所有的访问请求,访问设置需要在ShiroFilter中进行配置,参数为SecurityManager的类型
2、这里的securityManager是安全管理器,也需要在配置中进行设置,参数为realms自定义类
3、这里的realms自定义类为授权和认证的实现操作。
- 首先是配置类
//标记当前类是一个配置类,用于模拟spring的配置文件
@Configuration
public class Shiro {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
/**
* 配置一个 SecurityManager安全管理器
* @return
*/
@Bean
public SecurityManager securityManager(Realm myRealm){
DefaultWebSecurityManager defaultSecurityManager = new DefaultWebSecurityManager();
defaultSecurityManager.setRealm(myRealm);
return defaultSecurityManager;
}
@Bean
public MyRealm myRealm(){
//此处添加认证器 及 散列次数
// HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();
// credentialsMatcher.setHashAlgorithmName("md5");
// 2.1、设置 散列次数
// credentialsMatcher.setHashIterations(12);
// myRealm.setCredentialsMatcher(credentialsMatcher);
return myRealm;
}
/**
* 配置过滤器
* 例如 什么可以进行访问,什么不可以进行访问等等
* @return
*/
@Bean
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager){
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setLoginUrl("/"); //配置用户登陆请求,如果需要进行登陆时,
// shiro就会进入这个请求进入登陆页面
shiroFilterFactoryBean.setSecurityManager(securityManager);
shiroFilterFactoryBean.setSuccessUrl("/success");//配置用户登陆成功时的请求,如果登陆成功后
// shiro就会进入这个请求进入该页面
shiroFilterFactoryBean.setUnauthorizedUrl("/nopermission");//配置没有权限时的请求页面
//配置权限拦截规则
Map<String,String> fileterChainMap = new LinkedHashMap<>();
fileterChainMap.put("/login","anon");//配置这里登陆请求时不需要进行认证
fileterChainMap.put("/logout","logout");//配置登陆的请求
fileterChainMap.put("/admin/*","authc");//配置一个admin开头的请求,需要进行认证
fileterChainMap.put("/user/*","authc");//配置一个user开头的请求,需要进行认证
//fileterChainMap.put("/**","authc");//配置一个*开头的请求,需要进行认证
//设置 权限拦截规则
shiroFilterFactoryBean.setFilterChainDefinitionMap(fileterChainMap);
return shiroFilterFactoryBean;
}
}
- 自定义 realms文件
// @Component
public class MyRealm extends AuthorizingRealm {
/** 用户认证的方法
* 这里存放用户的用户名和密码等相关信息 AuthenticationToken
* @param authenticationToken
* @return
* @throws AuthenticationException
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
return null;
}
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return null;
}
-
常见的过滤器
-
用户登出
@RequestMapping("logout")
public String logout(){
Subject subject = SecurityUtils.getSubject();
subject.logout();
return "redirect: /login.jsp";
}
- pom 设置,该文件中添加了mysql、mybatisplus以及阿里巴巴的druid的相关包
<!-- org.apache.shiro/shiro-spring 1、添加shiro配置 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.9.1</version>
</dependency>
<!--mybatis plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--druid依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.8</version>
</dependency>
<!--lombok注解-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
- 属性文件properties文件
# mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/shiro?characterEncoding=UTF-8
spring.datasource.name=root
spring.datasource.password=root
# mybatis plus 配置实体 和 xml文件
mybatis-plus.type-aliases-package=com.shrio.srpingbootshrio.entity
mybatis-plus.mapper-locations=classpath:mapper/*.xml
User.java
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private String id;
private String name;
private String password;
private String salt;
}
UserDao.java
@Mapper
public interface UserDao {
void save(User user);
}
mapper.xml、UserService.java、UserServiceImpl.java等等文件在此略去