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 <[email protected]> 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
>

Reply via email to