在jboss上部署spring安全应用程序后获取org.springframework.security.authentication.AuthenticationCredentialsNotFoundException

时间:2018-04-12 12:09:16

标签: spring spring-security jboss

我正在尝试在WildFly 9.0.1上部署Spring Boot应用程序。

我想使用UserDetails界面使用Spring Security对用户进行身份验证。但是当我尝试访问安全的休息服务时,我在部署后遇到以下异常:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is
  org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
  org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
  org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
  org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
  io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:86)
  io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
  io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
  org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
  io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
  io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
  io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
  io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
  io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
  io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
  io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)
  io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:72)
  io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
  io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
  io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
  org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
  io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
  io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
  io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:282)
  io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:261)
  io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:80)
  io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:172)
  io.undertow.server.Connectors.executeRootHandler(Connectors.java:199)
  io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:774)
  java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

我的技术堆栈是:

Spring boot 1.5
WildFly 9.0.1
Spring Security 4

访问部署在WildFly上的Web应用程序需要执行哪些配置?

基本配置详情。

  1. SecurityConfig.java

    @Override
    protected void configure(HttpSecurity http) throws Exception {        
        http.httpBasic().and().cors().and().authorizeRequests()
        .antMatchers("/login").permitAll()      
        .anyRequest().authenticated().and()        
        .csrf().csrfTokenRepository(
          CookieCsrfTokenRepository.withHttpOnlyFalse()).and()
         .logout()
         .deleteCookies("remove")
         .invalidateHttpSession(true)
         .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))         
         .permitAll();
    
    }
    
    
          @Autowired
           public void configureGlobal(AuthenticationManagerBuilder auth)
           throws Exception {
                auth.userDetailsService(userDetailsService)
                 .passwordEncoder(new BCryptPasswordEncoder());
    
           }
    
  2. UserController.java

       @GetMapping("/user")
       @ResponseBody
       public User user() {        
        User user = getPricipalUser();      
          return user;
        }
    
    private User getPricipalUser() {
        User user = null;
        Object principal = SecurityContextHolder.getContext()
       .getAuthentication().getPrincipal();
        if (principal instanceof User) {
            user = (User) principal;
            logger.info("User Info = " + user);
        } else {
            logger.error("Principal issue");
        }
        return user;
    }
    
  3. 代码已成功部署在Wildfly中,但在尝试访问http://<<>>:8090 / user时收到错误,因为authenticationCredentialsNotFoundException

0 个答案:

没有答案