You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@shiro.apache.org by Alex Orlov <oo...@mail.ru> on 2020/11/21 22:37:16 UTC

Shiro web + Spring -> No realms have been configured!

Hello all,
 
I try to configure Shiro web + Spring + my custrom Realm but I have a problem.
 
This is my web initializer:
 
@Order(Ordered.HIGHEST_PRECEDENCE)
public class WebInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        var diContext = new AnnotationConfigWebApplicationContext();
        diContext.register(TempConfig.class);
        diContext.setServletContext(servletContext);
        var servlet = servletContext.addServlet("SpringServlet", new DispatcherServlet(diContext));
        servlet.setLoadOnStartup(1);
        servlet.addMapping("/");
        
        FilterRegistration.Dynamic filterRegistration =
                servletContext.addFilter("ShiroFilter", "org.apache.shiro.web.servlet.ShiroFilter");
        filterRegistration.addMappingForUrlPatterns(
                EnumSet.<DispatcherType> of(
                        DispatcherType.REQUEST,
                        DispatcherType.FORWARD,
                        DispatcherType.INCLUDE,
                        DispatcherType.ERROR
                ),
                false, "/*");
        servletContext.addListener("org.apache.shiro.web.env.EnvironmentLoaderListener");
    }
}
 
This is Spring config:
 
@Configuration
@ComponentScan(basePackageClasses = {
    MyController.class,
})
@EnableWebMvc
@Import ({
    ShiroBeanConfiguration.class,
    ShiroAnnotationProcessorConfiguration.class,
    ShiroWebConfiguration.class,
    ShiroWebFilterConfiguration.class,
    ShiroRequestMappingConfig.class
})
public class TempConfig implements WebMvcConfigurer {
    public TempConfig() {
    }
 
    @Bean
    @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
    public CacheManager cacheManager() {
        var manager = new MemoryConstrainedCacheManager();
        return manager;
    }
 
    @Bean
    @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
    public Realm realm() {
        var realm = new SecurityRealm();// <- this is my custom realm.
        return realm;
    }
}
 
And this is what I get:
 
WARN  org.apache.shiro.authc.AbstractAuthenticator - Authentication failed for token submission [temp.security.WebAuthenticationToken@79ffcf2c].  Possible unexpected error? (Typical or expected login exceptions should extend from AuthenticationException).
java.lang.IllegalStateException: Configuration error:  No realms have been configured!  One or more realms must be present to execute an authentication attempt.
    at org.apache.shiro.authc.pam.ModularRealmAuthenticator.assertRealmsConfigured(ModularRealmAuthenticator.java:161) ~[shiro-all-1.7.0.jar:?]
    at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:270) ~[shiro-all-1.7.0.jar:?]
    at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198) [shiro-all-1.7.0.jar:?]
    at org.apache.shiro.mgt.AuthenticatingSecurityManager.authenticate(AuthenticatingSecurityManager.java:106) [shiro-all-1.7.0.jar:?]
    at org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:275) [shiro-all-1.7.0.jar:?]
    at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:260) [shiro-all-1.7.0.jar:?]
 
At the same time, I see in log, that my realm#onInit method was called and the realm was intialized. However, Shiro doesn’t see it. I use jetty 9 + spring 5. I do NOT use spring boot. Could anyone say, how to fix it?
 
--
Best regards, Alex Orlov

Re[2]: Shiro web + Spring -> No realms have been configured!

Posted by Alex Orlov <oo...@mail.ru>.
Hello Brian,
 
I configured filterRegistration wrong. I found a sample in internet and now the problem is solved. Thank you.
 
 
--
Best regards, Alex Orlov
 
  
>Понедельник, 23 ноября 2020, 23:46 +03:00 от Brian Demers <br...@gmail.com>:
> 
>Have you tried without setting those scopes?
> 
>I would guess setting those scope _shouldn't_ matter, as the default should be a Singleton.
> 
>If that doesn't help can you create a simple project that reproduces the problem on GitHub?  
>On Sat, Nov 21, 2020 at 5:38 PM Alex Orlov < ooo_saturn7@mail.ru > wrote:
>>Hello all,
>> 
>>I try to configure Shiro web + Spring + my custrom Realm but I have a problem.
>> 
>>This is my web initializer:
>> 
>>@Order(Ordered.HIGHEST_PRECEDENCE)
>>public class WebInitializer implements WebApplicationInitializer {
>>    @Override
>>    public void onStartup(ServletContext servletContext) throws ServletException {
>>        var diContext = new AnnotationConfigWebApplicationContext();
>>        diContext.register(TempConfig.class);
>>        diContext.setServletContext(servletContext);
>>        var servlet = servletContext.addServlet("SpringServlet", new DispatcherServlet(diContext));
>>        servlet.setLoadOnStartup(1);
>>        servlet.addMapping("/");
>>        
>>        FilterRegistration.Dynamic filterRegistration =
>>                servletContext.addFilter("ShiroFilter", "org.apache.shiro.web.servlet.ShiroFilter");
>>        filterRegistration.addMappingForUrlPatterns(
>>                EnumSet.<DispatcherType> of(
>>                        DispatcherType.REQUEST,
>>                        DispatcherType.FORWARD,
>>                        DispatcherType.INCLUDE,
>>                        DispatcherType.ERROR
>>                ),
>>                false, "/*");
>>        servletContext.addListener("org.apache.shiro.web.env.EnvironmentLoaderListener");
>>    }
>>}
>> 
>>This is Spring config:
>> 
>>@Configuration
>>@ComponentScan(basePackageClasses = {
>>    MyController.class,
>>})
>>@EnableWebMvc
>>@Import ({
>>    ShiroBeanConfiguration.class,
>>    ShiroAnnotationProcessorConfiguration.class,
>>    ShiroWebConfiguration.class,
>>    ShiroWebFilterConfiguration.class,
>>    ShiroRequestMappingConfig.class
>>})
>>public class TempConfig implements WebMvcConfigurer {
>>    public TempConfig() {
>>    }
>> 
>>    @Bean
>>    @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
>>    public CacheManager cacheManager() {
>>        var manager = new MemoryConstrainedCacheManager();
>>        return manager;
>>    }
>> 
>>    @Bean
>>    @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
>>    public Realm realm() {
>>        var realm = new SecurityRealm();// <- this is my custom realm.
>>        return realm;
>>    }
>>}
>> 
>>And this is what I get:
>> 
>>WARN  org.apache.shiro.authc.AbstractAuthenticator - Authentication failed for token submission [temp.security.WebAuthenticationToken@79ffcf2c]. Possible unexpected error? (Typical or expected login exceptions should extend from AuthenticationException).
>>java.lang.IllegalStateException: Configuration error:  No realms have been configured!  One or more realms must be present to execute an authentication attempt.
>>    at org.apache.shiro.authc.pam.ModularRealmAuthenticator.assertRealmsConfigured(ModularRealmAuthenticator.java:161) ~[shiro-all-1.7.0.jar:?]
>>    at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:270) ~[shiro-all-1.7.0.jar:?]
>>    at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198) [shiro-all-1.7.0.jar:?]
>>    at org.apache.shiro.mgt.AuthenticatingSecurityManager.authenticate(AuthenticatingSecurityManager.java:106) [shiro-all-1.7.0.jar:?]
>>    at org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:275) [shiro-all-1.7.0.jar:?]
>>    at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:260) [shiro-all-1.7.0.jar:?]
>> 
>>At the same time, I see in log, that my realm#onInit method was called and the realm was intialized. However, Shiro doesn’t see it. I use jetty 9 + spring 5. I do NOT use spring boot. Could anyone say, how to fix it?
>> 
>>--
>>Best regards, Alex Orlov
 

Re: Shiro web + Spring -> No realms have been configured!

Posted by Brian Demers <br...@gmail.com>.
Have you tried without setting those scopes?

I would guess setting those scope _shouldn't_ matter, as the default should
be a Singleton.

If that doesn't help can you create a simple project that reproduces the
problem on GitHub?

On Sat, Nov 21, 2020 at 5:38 PM Alex Orlov <oo...@mail.ru> wrote:

> Hello all,
>
> I try to configure Shiro web + Spring + my custrom Realm but I have a
> problem.
>
> This is my web initializer:
>
> @Order(Ordered.HIGHEST_PRECEDENCE)
> public class WebInitializer implements WebApplicationInitializer {
>     @Override
>     public void onStartup(ServletContext servletContext) throws
> ServletException {
>         var diContext = new AnnotationConfigWebApplicationContext();
>         diContext.register(TempConfig.class);
>         diContext.setServletContext(servletContext);
>         var servlet = servletContext.addServlet("SpringServlet", new
> DispatcherServlet(diContext));
>         servlet.setLoadOnStartup(1);
>         servlet.addMapping("/");
>
>         FilterRegistration.Dynamic filterRegistration =
>                 servletContext.addFilter("ShiroFilter",
> "org.apache.shiro.web.servlet.ShiroFilter");
>         filterRegistration.addMappingForUrlPatterns(
>                 EnumSet.<DispatcherType> of(
>                         DispatcherType.REQUEST,
>                         DispatcherType.FORWARD,
>                         DispatcherType.INCLUDE,
>                         DispatcherType.ERROR
>                 ),
>                 false, "/*");
>
> servletContext.addListener("org.apache.shiro.web.env.EnvironmentLoaderListener");
>     }
> }
>
> This is Spring config:
>
> @Configuration
> @ComponentScan(basePackageClasses = {
>     MyController.class,
> })
> @EnableWebMvc
> @Import ({
>     ShiroBeanConfiguration.class,
>     ShiroAnnotationProcessorConfiguration.class,
>     ShiroWebConfiguration.class,
>     ShiroWebFilterConfiguration.class,
>     ShiroRequestMappingConfig.class
> })
> public class TempConfig implements WebMvcConfigurer {
>     public TempConfig() {
>     }
>
>     @Bean
>     @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
>     public CacheManager cacheManager() {
>         var manager = new MemoryConstrainedCacheManager();
>         return manager;
>     }
>
>     @Bean
>     @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
>     public Realm realm() {
>         var realm = new SecurityRealm();// <- this is my custom realm.
>         return realm;
>     }
> }
>
> And this is what I get:
>
> WARN  org.apache.shiro.authc.AbstractAuthenticator - Authentication failed
> for token submission [temp.security.WebAuthenticationToken@79ffcf2c].
> Possible unexpected error? (Typical or expected login exceptions should
> extend from AuthenticationException).
> java.lang.IllegalStateException: Configuration error:  No realms have been
> configured!  One or more realms must be present to execute an
> authentication attempt.
>     at
> org.apache.shiro.authc.pam.ModularRealmAuthenticator.assertRealmsConfigured(ModularRealmAuthenticator.java:161)
> ~[shiro-all-1.7.0.jar:?]
>     at
> org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:270)
> ~[shiro-all-1.7.0.jar:?]
>     at
> org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198)
> [shiro-all-1.7.0.jar:?]
>     at
> org.apache.shiro.mgt.AuthenticatingSecurityManager.authenticate(AuthenticatingSecurityManager.java:106)
> [shiro-all-1.7.0.jar:?]
>     at
> org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:275)
> [shiro-all-1.7.0.jar:?]
>     at
> org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:260)
> [shiro-all-1.7.0.jar:?]
>
> At the same time, I see in log, that my realm#onInit method was called and
> the realm was intialized. However, Shiro doesn’t see it. I use jetty 9 +
> spring 5. I do NOT use spring boot. Could anyone say, how to fix it?
>
> --
> Best regards, Alex Orlov
>