package com.qianfeng.freeshiro.config;
import com.qianfeng.freeshiro.util.MyBatisRealm;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.config.ShiroConfiguration;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.DelegatingFilterProxy;
import java.util.LinkedHashMap;
import java.util.Map;
@Configuration
public class ShiroConfigration {
@SuppressWarnings("unused")
private static final Logger logger = LoggerFactory.getLogger(ShiroConfiguration.class);
// public EhCacheManager getEhCacheManager() {
// EhCacheManager em = new EhCacheManager();
// em.setCacheManagerConfigFile("classpath:ehcache-shiro.xml");
// return em;
// }
/**
* 注册DelegatingFilterProxy(Shiro)
*/
@Bean public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistration = new FilterRegistrationBean();
filterRegistration.setFilter(new DelegatingFilterProxy("shiroFilter"));
// 该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理
filterRegistration.addInitParameter("targetFilterLifecycle", "true");
filterRegistration.setEnabled(true);
filterRegistration.addUrlPatterns("/*");
return filterRegistration;
}
@Bean(name = "lifecycleBeanPostProcessor")
public LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor();
}
@Bean
public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() {
DefaultAdvisorAutoProxyCreator daap = new DefaultAdvisorAutoProxyCreator();
daap.setProxyTargetClass(true);
return daap;
}
@Bean(name = "securityManager")
public DefaultWebSecurityManager getDefaultWebSecurityManager(MyBatisRealm myBatisRealm) {
DefaultWebSecurityManager dwsm = new DefaultWebSecurityManager();
dwsm.setRealm(myBatisRealm);
// <!-- 用户授权/认证信息Cache, 采用EhCache 缓存 -->
// dwsm.setCacheManager(getEhCacheManager());
return dwsm;
}
@Bean
public AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor(MyBatisRealm myBatisRealm) {
AuthorizationAttributeSourceAdvisor aasa = new AuthorizationAttributeSourceAdvisor();
aasa.setSecurityManager(getDefaultWebSecurityManager(myBatisRealm));
return new AuthorizationAttributeSourceAdvisor();
}
/**
* 加载shiroFilter权限控制规则(从数据库读取然后配置)
*/
@Bean(name = "shiroFilter")
public ShiroFilterFactoryBean getShiroFilterFactoryBean(MyBatisRealm myBatisRealm) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(getDefaultWebSecurityManager(myBatisRealm));
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setSuccessUrl("/login_enter");
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
filterChainDefinitionMap.put("/test", "anon");
filterChainDefinitionMap.put("/bbbb", "authc,perms[emp]");
/*filterChainDefinitionMap.put("/testtt", "authc");
filterChainDefinitionMap.put("/**", "user");*/
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
}
springboot集成freemarker和shiro框架


**SpringBoot集成Freemarker与Shiro框架详解** 在现代Web开发中,SpringBoot因其简洁、高效的特性,已经成为很多开发者的选择。而FreeMarker和Shiro则分别是常用的模板引擎和安全框架,它们能帮助我们构建出功能强大且安全的Web应用。本文将详细讲解如何在SpringBoot项目中整合这两者。 **一、FreeMarker简介** FreeMarker是一个基于模板的Java模板引擎,它能够将数据模型渲染成HTML或者其他格式的文档。FreeMarker与JSP不同,它不依赖于Servlet API,因此更轻量级,适合用于SpringBoot这样的微服务架构。 **二、集成FreeMarker** 1. 添加依赖:在`pom.xml`中添加FreeMarker的相关依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> ``` 2. 配置文件:在`application.properties`或`application.yml`中配置FreeMarker模板路径和后缀: ```properties # application.properties 示例 spring.freemarker.template-loader-path=classpath:/templates/ spring.freemarker.suffix=.ftl ``` 3. 创建模板:在指定的模板路径下创建`.ftl`文件,编写HTML模板。 **三、Shiro框架简介** Apache Shiro是一个强大且易用的Java安全框架,处理认证、授权、加密和会话管理,与Spring等其他框架集成良好。 **四、集成Shiro** 1. 添加依赖:在`pom.xml`中添加Shiro依赖: ```xml <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.7.5</version> </dependency> ``` 2. 配置Shiro:创建一个名为`ShiroConfig.java`的配置类,配置Shiro Realm、过滤器链等: ```java @Configuration public class ShiroConfig { // 实现Realm,配置用户和权限 @Bean public MyRealm myRealm() { return new MyRealm(); } // 配置过滤器链 @Bean public DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager manager = new DefaultWebSecurityManager(); manager.setRealm(myRealm()); return manager; } // 其他配置... } ``` 3. 自定义登录控制器:创建一个用于处理用户登录的Controller,调用Shiro进行身份验证。 **五、整合FreeMarker与Shiro** 1. 在FreeMarker模板中使用Shiro标签库:在.ftl文件顶部引入Shiro标签库: ```html <#assign shiro = "shiro:${'@org.apache.shiro.web.tags.ShiroTagLibHandler@getTagLibUri()'}"> <#import "${shiro}" as shiro/> ``` 2. 使用Shiro标签:在模板中根据需要使用`shiro:hasPermission`、`shiro:principal`等标签进行权限控制和用户信息展示。 **六、示例应用** 在实际应用中,你可以创建一个简单的登录页面,用户输入用户名和密码,提交后通过Shiro进行身份验证。验证成功后,根据用户的角色和权限展示不同的页面内容,这部分可以通过FreeMarker模板实现动态渲染。 SpringBoot集成FreeMarker和Shiro可以让我们轻松地构建出一个具备用户认证、授权功能的Web应用。通过FreeMarker的模板机制,我们可以灵活地控制页面显示,而Shiro则为我们提供了强大的安全防护。理解并掌握这两者的集成,对于提升Web应用的安全性和用户体验具有重要意义。

























































































































- 1
- 2

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

- 粉丝: 0
- 资源: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 数字公共产品研究报告(2024年).pdf
- MacOS下批量Word转PDF脚本
- Zoom Player 2025
- 数字技术适老化发展报告(2024年).pdf
- chromedriver-mac-x64-136.0.7086.0.zip
- chromedriver-win64-136.0.7086.0.zip
- chromedriver-win32-136.0.7086.0.zip
- chromedriver-linux64-136.0.7086.0.zip
- chromedriver-mac-arm64-136.0.7086.0.zip
- 单片机-手环-心律-健康
- 蓝桥杯嵌入式16届模拟3满分代码
- vk-data-goods-sku-popup-uniapp资源
- faQnet-机器学习资源
- 数字孪生赋能低空经济研究报告(2024年).pdf
- Deeptrain-深度学习资源
- 工具变量-1929-2024年度平均降水量数据.xlsx


