将Apache Shiro集成到Spring-Boot应用程序中

Shiro的Spring-Boot集成是将Shiro集成到基于Spring的应用程序中的最简单方法,用于更一般的Spring Framework集成,采用注释或XML指南。

独立应用程序

在您的应用程序类路径中包含Shiro Spring启动程序依赖项(我们建议使用Apache Maven或Gradle等工具来管理它)。

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring-boot-starter</artifactId>
    <version>1.5.0-SNAPSHOT</version>
</dependency>

剩下的唯一事情就是配置一个领域:

@Bean
public Realm realm() {
  ...
}

设置Shiro的最简单方法是使所有SecurityUtils。*方法在所有情况下都能工作,就是让SecurityManagerbean成为一个静态单例。请勿在Web应用程序中执行此操作 - 请参阅下面的“ Web应用程序”部分。

@Autowired
private SecurityManager securityManager;
    
 @PostConstruct
 private void initStaticSecurityManager() {
     SecurityUtils.setSecurityManager(securityManager);
 }

就是这样,现在您可以Subject使用以下内容:

SecurityUtils.getSubject();

Web应用程序

Shiro拥有Spring Web应用程序的一流支持。在Web应用程序中,所有可通过Shiro访问的Web请求都必须通过主Shiro过滤器。此过滤器本身非常强大,允许基于任何URL路径表达式执行临时自定义过滤器链。

首先在您的应用程序类路径中包含Shiro Spring Web启动程序依赖项(我们建议使用Apache Maven或Gradle等工具来管理它)。

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring-boot-web-starter</artifactId>
    <version>1.5.0-SNAPSHOT</version>
</dependency>

提供Realm实现:

@Bean
public Realm realm() {
  ...
}

最后ShiroFilterChainDefinition,它将把任何特定于应用程序的路径映射到给定的过滤器,以便允许不同路径的不同访问级别。

@Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {
    DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
    
    // logged in users with the 'admin' role
    chainDefinition.addPathDefinition("/admin/**", "authc, roles[admin]");
    
    // logged in users with the 'document:read' permission
    chainDefinition.addPathDefinition("/docs/**", "authc, perms[document:read]");
    
    // all other paths require a logged in user
    chainDefinition.addPathDefinition("/**", "authc");
    return chainDefinition;
}

如果您使用的是Shiro的注释,请参阅下面的注释部分。

启用S​​hiro注释

在两个独立的和Web应用程序,你可能需要使用Shiro的安全检查注释(例如@RequiresRoles,@RequiresPermissions等),这些注释上面列出双方首发自动启用。

只需注释您的方法即可使用它们:

@RequiresPermissions("document:read")
public void readDocument() {
    ...
}

注释和Web应用程序
Shiro注释完全支持在@Controller类中使用,例如:

@Controller
public class AccountInfoController {

    @RequiresRoles("admin")
    @RequestMapping("/admin/config")
    public String adminConfig(Model model) {
        return "view";
    }
}

ShiroFilterChainDefinition与至少一个定义豆仍需要对于这项工作,无论是配置所有路径是经由accessable anon滤波器或“许可”模式中的过滤器,例如:authcBasic[permissive]。

@Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {
    DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
    chainDefinition.addPathDefinition("/**", "anon"); // all paths are managed via annotations
    
    // or allow basic authentication, but NOT require it.
    // chainDefinition.addPathDefinition("/**", "authcBasic[permissive]"); 
    return chainDefinition;
}

高速缓存

启用缓存就像提供CacheManager bean 一样简单:

@Bean
protected CacheManager cacheManager() {
    return new MemoryConstrainedCacheManager();
}

配置属性

默认值 描述
shiro.enabled true 启用S​​hiro的Spring模块
shiro.web.enabled true 启用S​​hiro的Spring Web模块
shiro.annotations.enabled true 为Shiro的注释启用Spring支持
shiro.sessionManager.deleteInvalidSessions true 从会话存储中删除无效会话
shiro.sessionManager.sessionIdCookieEnabled true 启用会话ID到cookie,以进行会话跟踪
shiro.sessionManager.sessionIdUrlRewritingEnabled true 启用会话URL重写支持
shiro.userNativeSessionManager false 如果启用,Shiro将管理HTTP会话而不是容器
shiro.sessionManager.cookie.name JSESSIONID 会话cookie名称
shiro.sessionManager.cookie.maxAge -1 会话cookie最大年龄
shiro.sessionManager.cookie.domain 空值 会话cookie域
shiro.sessionManager.cookie.path 空值 会话cookie路径
shiro.sessionManager.cookie.secure false 会话cookie安全标志
shiro.rememberMeManager.cookie.name rememberMe RememberMe cookie名称
shiro.rememberMeManager.cookie.maxAge 一年 RememberMe cookie最大年龄
shiro.rememberMeManager.cookie.domain 空值 RememberMe cookie域名
shiro.rememberMeManager.cookie.path 空值 RememberMe cookie路径
shiro.rememberMeManager.cookie.secure false RememberMe cookie安全标志
shiro.loginUrl /login.jsp 未经身份验证的用户重定向到登录页面时使用的登录URL
shiro.successUrl / 用户登录后的默认登录页面(如果在当前会话中找不到替代)
shiro.unauthorizedUrl 空值 页面将用户重定向到未授权的位置(403页)

猜你喜欢

转载自blog.csdn.net/qq_38036909/article/details/90903883