1.springboot介绍
springBoot使用习惯优于配置的理念,然项目快速运行起来,使用Spring Boot很容易创建一个独立运行的(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot可以不用或者很少使用Spring 配置
2.shiro介绍
Shiro是Apache下的一个开源项目。shiro属于轻量级框架,相对于SpringSecurity简单的多,也没有SpringSecurity那么复杂。
因为近期涉及到权限管理,所以先熟悉下shiro框架,根据自身了解,完成了一个简单demo,直接放到代码,后续会根据深入了解追加
需要两个配置文件

shiroConfig是配置文件:
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* shiro的配置类
*/
@Configuration
public class shiroConfig {
//创建ShiroFilterFactoryBean
@Bean
public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager){
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
//设置安全管理器
shiroFilterFactoryBean.setSecurityManager(securityManager);
//添加shiro内置过滤器
/**
* shiro 内置过滤器 可以实现权限相关的拦截器
* 常用的过滤器:
* anon:无需认(登录)可以访问
* authc:必须认证才能访问
* user:如果使用rememberMe的功能才能直接访问
* perms:该资源必须得到资源权限才能访问
* role:该资源必须得到角色权限才能访问
*/
Map<String,String> filterMap = new LinkedHashMap<>();
//filterMap.put("/shiroadd","authc");
//使用通配符 批量拦截
//先配置无需拦截的url ,在配置拦截的url
filterMap.put("/testThymeleaf","anon");
filterMap.put("/*","authc");
//修改跳转的login.jsp页面
shiroFilterFactoryBean.setLoginUrl("/shirologin");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
return shiroFilterFactoryBean;
}
//创建DefaultWebSecurityManager
@Bean(name = "securityManager")
public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("UserRealm") UserRealm userRealm){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//关联realm
securityManager.setRealm(userRealm);
return securityManager;
}
//创建Realm
@Bean(name="UserRealm")
public UserRealm getRealm(){
return new UserRealm();
}
}
UserRealm配置文件
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
public class UserRealm extends AuthorizingRealm {
/**
* 执行授权逻辑
* @param principals
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
System.out.println("执行授权逻辑");
return null;
}
/**
* 执行认证逻辑
* @param token
* @return
* @throws AuthenticationException
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
System.out.println("执行认证逻辑");
return null;
}
}
剩下实现类:
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ShiroController {
@RequestMapping("/testThymeleaf")
public String testThymeleaf(Model model){
model.addAttribute("name","老曹");
return "/test";
}
@RequestMapping("/shiroadd")
public String add(){
return "/user/add";
}
@RequestMapping("/shiroupdate")
public String update(){
return "/user/update";
}
@RequestMapping("/shirologin")
public String login(){
return "login";
}
}
页面结构如下:

本文介绍如何在SpringBoot项目中集成Shiro框架进行权限管理,包括配置ShiroFilterFactoryBean和DefaultWebSecurityManager,以及自定义UserRealm实现认证和授权逻辑。
350

被折叠的 条评论
为什么被折叠?



