1.环境搭建(主要是在springcloud基础上添加shiro包)
2.完成核心代码编写
2.0 shiro配置java类(
主要配置 内容
安全管理器 SecurityManager;
过滤器工厂 ShiroFilterFactoryBean(设置自定义过滤器和设置哪些路径是允许匿名访问);
自定义realm(数据源,从数据库获得真实用户信息(密码权限),并封装成AuthenticationInfo认证信息 和 AuthorizationInfo授 权信息
自定义拦截器(也用Bean 配置是为了可以在拦截器里可以用@Autowird 获得容器里的bean ,比如UserService)
题外话:过滤器先于spring容器启动,所以直接@Autowird拿到的对象是空的,所以考虑将过滤器也交给spring管理
)
3.类图
4..断点演示流程
1.环境搭建
pom.xml 文件引入包
<!--shiro-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.2.1</version>
</dependency>
2.核心代码如下
package com.gupaoedu.service.shiro;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.mgt.SecurityManager;
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 javax.servlet.Filter;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
@Configuration
public class ShiroConfig {
/**
* 将自己的验证方法注入容器
* @prama
* @return
* @date 2018/12/5 15:28
*/
@Bean
public MyShiroRealm myShiroRealm(){
MyShiroRealm myShiroRealm = new MyShiroRealm();
return myShiroRealm;
}
/**
* 权限管理,配置主要的realm的管理认证
* @prama
* @return
* @date 2018/12/5 15:30
*/
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// 设置realm.
securityManager.setRealm(myShiroRealm());
return securityManager;
}
/**
* Filter工厂,设置对应的过滤条件和跳转条件
* @prama
* @return
* @date 2018/12/5 16:02
*/
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// 必须设置 SecurityManager
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 登录
shiroFilterFactoryBean.setLoginUrl("/notLogin");
// 设置无权限时跳转的 ur
shiroFilterFactoryBean.setUnauthorizedUrl("/notRole");
// 自定义 OAuth2Filter 过滤器,替代默认的过滤器
Map<String, Filter> filters = new HashMap<>();
filters.put("oauth2", oAuth2FilterBean());
shiroFilterFactoryBean.setFilters(filters);
// 设置拦截器
Map<String,String> map = new LinkedHashMap<String, String>();
// 普通用