当前位置: 首页 > 知识库问答 >
问题:

Shiro没有调用代码可访问的SecurityManager

凌和悦
2023-03-14
@Configuration
public class ShiroConfig {

    @Bean
    public Realm realm() {
        return new UserRealm();
    }

    @Bean
    public HashedCredentialsMatcher hashedCredentialsMatcher() {
        HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
        hashedCredentialsMatcher.setHashAlgorithmName(PasswordEncoder.getALGORITHM()); 
        hashedCredentialsMatcher.setHashIterations(PasswordEncoder.getITERATION()); 
        return hashedCredentialsMatcher;
    }

    @Bean
    public UserRealm shiroRealm() {
        UserRealm userRealm = new UserRealm();
        userRealm.setCredentialsMatcher(hashedCredentialsMatcher()); 
        return userRealm;
    }

    @Bean
    public SessionsSecurityManager securityManager() {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(shiroRealm());
        return securityManager;
    }

    @Bean
    public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
        DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
        defaultAdvisorAutoProxyCreator.setUsePrefix(true);
        return defaultAdvisorAutoProxyCreator;
    }

    @Bean
    public ShiroFilterChainDefinition shiroFilterChainDefinition() {
        DefaultShiroFilterChainDefinition definition = new DefaultShiroFilterChainDefinition();
        definition.addPathDefinition("/login", "anon");
        definition.addPathDefinition("/register", "anon");
        definition.addPathDefinition("/api/**", "user");
        return definition;
    }
}
    @PostMapping("/login")
    @ResponseBody
    public Object login(@RequestParam("username") String username,
                        @RequestParam("password") String password) {
        if (username.equals("") || password.equals("")) {
            return "please provide complete information";
        }
        UsernamePasswordToken token = new UsernamePasswordToken(username, password);
        Subject subject = SecurityUtils.getSubject(); // this line caused exception
        ...
    }

我对这个例外很困惑。有人能帮忙吗?

我使用的是Spring Boot 2.1.6。release和shiro-spring-boot-starter 1.4.0。

共有1个答案

勾向文
2023-03-14

您是否使用shiro-spring-boot-web-starter依赖项而不是shiro-spring-boot-starter依赖项?

根据这个文档,看起来这是spring boot web应用程序所需要的。

https://shiro.apache.org/spring-boot.html#spring-webapplications

 类似资料:
  • 我正在用Spring/Hibernate/JAX-RS(jersey)做项目。我想把四郎整合到我的项目中。我按照文档中的方式进行配置。我有自己的Realm实现。 问:问题是当调用authBasic路径时,它与MyRealm很好地配合。但是当我调用authc(FormAuthenticationFilter)时,它会显示登录页面,而当我输入凭据时,它会再次进入登录页面,而不会调用MyRealm。

  • 问题内容: 我正在开发其中要求之一是能够基于GPS数据执行实时反向地理编码操作的应用程序。特别是,我必须能够确定纬度,经度对映射到的州/省,并检测何时从一个州/省迁移到另一个州/省。 到目前为止,我有两个想法,但想知道是否有人对以下两个方面有任何想法: 有效解决此问题的最佳方法是什么? 在哪里可以找到一个好地方,北美州/省边界的合适格式是什么 首先,这是我的两个主要想法: 将北美分成一个网格,网格

  • 我正在使用KeyCloak3.4.3和保护基于Spring的Rest服务。 2018-02-28 15:19:10.216警告7813---[nio-8080-exec-2]A.A.ClientIdandSecretCredentialsProvider:客户端“DemoclientId”没有可用的机密2018-02-28 15:19:10.375错误7813---[nio-8080-exec-2

  • 问题内容: 我认为解决此问题的最佳方法就是粘贴我的代码: 如果我先点击 编辑按钮 和比 确认编辑 ,我试图获得(作为结果)的页面标签 FINALLY我在这里 不幸的是,这并不发生。我单击“ 编辑”按钮 ,然后单击“ 确认编辑” ,则什么也没有发生。 我怎么了 干杯 用新版本更新 问题答案: 好吧,那变得复杂了。是否将调用该操作还取决于组件或其父项之一的属性的结果。由于Bean在请求范围内,因此默认

  • 本文向大家介绍SpringBoot整合Shiro的代码详解,包括了SpringBoot整合Shiro的代码详解的使用技巧和注意事项,需要的朋友参考一下 shiro是一个权限框架,具体的使用可以查看其官网 http://shiro.apache.org/  它提供了很方便的权限认证和登录的功能.   而springboot作为一个开源框架,必然提供了和shiro整合的功能!接下来就用springbo