01.需要添加依赖
在springboot项目中,使用shiro框架需要在pom.xml文件中去添加依赖:
org.apache.shiro
shiro-spring
1.4.1
02.shiro核心对象配置
这里需要配置一个配置类,使用的注解是@Configuration,这表示修饰的类会有多个注解@bean来修饰的方法,而@bean修饰的方法通常用于构造一个对象,并且交给spring容器进行
第一步:创建 SpringShiroConfig 类。关键代码如下:
package com.cy.pj.common.config;
/**@Configuration 注解描述的类为一个配置对象,
* 此对象也会交给 spring 管理
*/
@Configuration
public class SpringShiroConfig {//spring-shiro.xml
}
第二步:在 Shiro 配置类中添加 SecurityManager 配置,关键代码如下:
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager sManager=new DefaultWebSecurityManager();
return sManager;
}
第三步:在 Shiro 配置类中添加 ShiroFilterFactoryBean 对象的配置。通过此对象设置资源匿名访问、认证访问。关键代码如下:
/**
-
配置 ShiroFilterFactoryBean 对象
-
基于此对象创建过滤器工厂,通过过滤器工厂创建过滤器,通过过滤器对请求过滤
-
@param securityManager
-
@return
*/
@Bean
public ShiroFilterFactoryBean shiroFilterFactory (SecurityManager securityManager) {
ShiroFilterFactoryBean sfBean=new ShiroFilterFactoryBean();
//设置安全管理器
sfBean.setSecurityManager(securityManager);//定义 map 指定请求过滤规则(哪些资源允许匿名访问,哪些必须认证访问)
LinkedHashMap<String,String> map= new LinkedHashMap<>();
//静态资源允许匿名访问:“anon”
map.put("/bower_components/",“anon”);
map.put("/build/",“anon”);
map.put("/dist/",“anon”);
map.put("/plugins/",“anon”);
//除了匿名访问的资源,其它都要认证(“authc”)后访问
map.put("/**",“authc”);
sfBean.setFilterChainDefinitionMap(map);
return sfBean;
}
Shiro 登陆页面呈现
-
服务端 Controller 实现
业务描述及设计实现
当服务端拦截到用户请求以后,判定此请求是否已经被认证,假如没有认证应该先跳转到登录页面。
第一步:在 PageController 中添加一个呈现登录页面的方法,关键代码如下:
@RequestMapping(“doLoginUI”)
public String doLoginUI(){
return “login”;
}
第二步:修改 SpringShiroConfig 类中 shiroFilterFactorybean 的配置,添加登陆 url 的设置。关键代码见 sfBean.setLoginUrl("/doLoginUI")部分。/**
- 配置 ShiroFilterFactoryBean 对象
- 基于此对象创建过滤器工厂,通过过滤器工厂创建过滤器,通过过滤器对请求过滤
- @param securityManager
- @return
*/
@Bean
public ShiroFilterFactoryBean shiroFilterFactory (SecurityManager securityManager) {
ShiroFilterFactoryBean sfBean=new ShiroFilterFactoryBean();
//设置安全管理器
sfBean.setSecurityManager(securityManager);
//设置登陆页面
sfBean.setLoginUrl("/doLoginUI");
//定义 map 指定请求过滤规则(哪些资源允许匿名访问,哪些必须认证访问)
LinkedHashMap<String,String> map= new LinkedHashMap<>();
//静态资源允许匿名访问:“anon”
map.put("/bower_components/",“anon”);
map.put("/build/",“anon”);
map.put("/dist/",“anon”);
map.put("/plugins/",“anon”);
//除了匿名访问的资源,其它都要认证(“authc”)后访问
map.put("/**",“authc”);
sfBean.setFilterChainDefinitionMap(map);
return sfBean;
}
客户端页面实现
业务描述及设计实现。
在/templates/pages/添加一个 login.html 页面,然后将项目部署到 web 服务器,并启动测试运行。
关键代码分析及实现。
具体代码见项目中 login.html。