APPLICATION FAILED TO START

padde479

Bekanntes Mitglied
Hallo,

neuer Tag, neues Pech 😬 Beim Start meiner Spring-App erhalte ich folgende Meldung:

Code:
***************************
APPLICATION FAILED TO START
***************************

Description:
Field authenaticationManager in com.inn.cafe.service.impl.UserServiceImpl required a bean of type 'org.springframework.security.authentication.AuthenticationManager' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:
Consider defining a bean of type 'org.springframework.security.authentication.AuthenticationManager' in your configuration.

Hierzu habe ich eine Klasse UserServiceImpl implementiert

Java:
package com.inn.cafe.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Service;

import com.inn.cafe.JWT.CustomerUserDetailsService;
import com.inn.cafe.JWT.JwtFilter;
import com.inn.cafe.JWT.JwtUtil;
import com.inn.cafe.POJO.User;
import com.inn.cafe.constants.CafeConstants;
import com.inn.cafe.dao.UserDao;
import com.inn.cafe.service.UserService;
import com.inn.cafe.util.CafeUtils;
import com.inn.cafe.wrapper.UserWrapper;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserDao userDao;
    @Autowired(required = true)
    AuthenticationManager authenaticationManager;
    @Autowired
    CustomerUserDetailsService customerUserDetailsService;
    @Autowired
    JwtUtil jwtUtil;
    @Autowired
    JwtFilter jwtFilter;

    @Override
    public ResponseEntity<String> signup(Map<String, String> requestMap) {
        try {
            if (validateSignupMap(requestMap)) {
                User user = userDao.findByEmailId(requestMap.get("email"));
                if (Objects.isNull(user)) {
                    userDao.save(getUserFromMap(requestMap));
                    return CafeUtils.getResponseEntity(CafeConstants.SUCCESSFULLY_REGISTERED, HttpStatus.OK);
                } else
                    return CafeUtils.getResponseEntity(CafeConstants.EMAIL_ALREADY_EXISTS, HttpStatus.BAD_REQUEST);
            } else
                return CafeUtils.getResponseEntity(CafeConstants.INVALID_DATA, HttpStatus.BAD_REQUEST);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return CafeUtils.getResponseEntity(CafeConstants.SOMETHING_WENT_WRONG, HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @Override
    public ResponseEntity<String> login(Map<String, String> requestMap) {
        try {
            Authentication auth = authenaticationManager.authenticate(
                    new UsernamePasswordAuthenticationToken(requestMap.get("email"), requestMap.get("password")));
            if (auth.isAuthenticated()) {
                if (customerUserDetailsService.getUserDetail().getStatus().equalsIgnoreCase("true")) {
                    return new ResponseEntity<String>(
                            "{\token\":\""
                                    + jwtUtil.generateToken(customerUserDetailsService.getUserDetail().getEmail(),
                                            customerUserDetailsService.getUserDetail().getRole())
                                    + "\"}",
                            HttpStatus.OK);
                } else {
                    /** TODO Auf {@link CafeConstants} umstellen. */
                    return new ResponseEntity<String>("{\"message\":\"" + CafeConstants.WAIT_FOR_ADMIN_APPROVAL + "\"}",
                            HttpStatus.BAD_REQUEST);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ResponseEntity<String>("{\"message\":\"" + CafeConstants.BAD_CREDENTIALS + "\"}",
                HttpStatus.BAD_REQUEST);
    }

    @Override
    public ResponseEntity<String> update(Map<String, String> requestMap) {
        try {
            if (jwtFilter.isUser()) {
                Optional<User> optional = userDao.findById(Integer.parseInt(requestMap.get("id")));
                if (!optional.isPresent()) {
                    userDao.updateStatus(requestMap.get("status"), Integer.parseInt(requestMap.get("id")));
                    return CafeUtils.getResponseEntity("User Status Updated Successfully", HttpStatus.OK);
                } else
                    return CafeUtils.getResponseEntity("User Id Doesn't Exist", HttpStatus.OK);
            } else
                return CafeUtils.getResponseEntity(CafeConstants.UNAUTHORIZED_ACCESS, HttpStatus.UNAUTHORIZED);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return CafeUtils.getResponseEntity(CafeConstants.SOMETHING_WENT_WRONG, HttpStatus.INTERNAL_SERVER_ERROR);
    }

    private boolean validateSignupMap(Map<String, String> requestMap) {
        if (requestMap.containsKey("name") && requestMap.containsKey("contactNumber") && requestMap.containsKey("email")
                && requestMap.containsKey("password"))
            return true;
        else
            return false;
    }

    private User getUserFromMap(Map<String, String> requestMap) {
        User user = new User();
        user.setName(requestMap.get("name"));
        user.setContactNumber(requestMap.get("contactNumber"));
        user.setEmail(requestMap.get("email"));
        user.setPassword(requestMap.get("password"));
        user.setStatus(requestMap.get("status"));
        user.setRole(requestMap.get("role"));
        return user;
    }

    @Override
    public ResponseEntity<List<UserWrapper>> getAllUser() {
        try {
            if (jwtFilter.isAdmin())
                return new ResponseEntity<List<UserWrapper>>(userDao.getAllUser(), HttpStatus.OK);
            else
                return new ResponseEntity<List<UserWrapper>>(new ArrayList<>(), HttpStatus.UNAUTHORIZED);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ResponseEntity<>(new ArrayList<>(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

Das zugehörige Interface UserService sieht wie folgt aus:
Java:
package com.inn.cafe.service;

import java.util.List;
import java.util.Map;

import org.springframework.http.ResponseEntity;

import com.inn.cafe.wrapper.UserWrapper;

public interface UserService {

    ResponseEntity<String> signup(Map<String, String> requestMap);
    ResponseEntity<String> login(Map<String, String> requestMap);
    ResponseEntity<List<UserWrapper>> getAllUser();
    ResponseEntity<String> update(Map<String, String> requestMap);
}

Ich habe doch die Klasse AuthenticationManager importiert und die Annotation @Autowired angegeben. Was mache ich falsch?
 

Oneixee5

Top Contributor
Ich würde insgesamt Infragestellen was du hier so tust oder vor hast. warum willst du die Authentifikation selbst machen? Dann diese komischen Maps als Methodenparameter ..., irgendwie sieht das alles gar nicht aus wie eine SpringBoot-Anwendung. Du solltest dir mal Spring-Security durcharbeiten.
Möglicherweise kannst du mal als Text beschreiben, was du eigentlich tun möchtest.

Wenn du etwas injecten möchtest, dann muss das als Bean vorliegen, je nach Version unvollständiges Beispiel:
Java:
@EnableWebSecurity
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
 
    ...
       
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
   
    ...
}

Dann sollte es später funktionieren die Instanz zu injecten:
Java:
@Autowired
private AuthenticationManager authenaticationManager;
 

Ullenboom

Bekanntes Mitglied
Es gibt keine Spring-managed Bean AuthenticationManager im Kontext. Daher funktioniert die Verdrahtung auch nicht. Da gab es mal ganz früh unter Spring Boot 1, hat man aber schon bei Spring Boot 2 fallengelassen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Datenbank und Application Konsistents Frameworks - Spring, Play, Blade, Vaadin & Co 4
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
ExceptionOfExpectation @Value() für application.properties [SpringBoot] Frameworks - Spring, Play, Blade, Vaadin & Co 9
M Integration Tests als Application? Frameworks - Spring, Play, Blade, Vaadin & Co 0
8u3631984 Test Properties aus application.yml Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Testcontainer : Copy Application.proprties in Container und starte erst danach Frameworks - Spring, Play, Blade, Vaadin & Co 2
8u3631984 Mehere gleichnamige Konfigurationsparameter in einer application.properties Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring: Testen von unterschiedlichen application.properties Werten Frameworks - Spring, Play, Blade, Vaadin & Co 6
tom.j85 SpringBoot Rest-Application funktioniert nicht - Keine Fehlermeldungen Frameworks - Spring, Play, Blade, Vaadin & Co 13
L SpringBoot Web Application Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Root-Pfad zu meiner Spring Boot Application Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Günstigste oder kostenlose Variante SpringBoot Application laufen zu lassen Frameworks - Spring, Play, Blade, Vaadin & Co 7
J Resolver für XML Schema Location beim Laden des Spring Application Context Frameworks - Spring, Play, Blade, Vaadin & Co 1
deetee Eclipse Maven project builder Fehler mit Spring application xml Frameworks - Spring, Play, Blade, Vaadin & Co 2
L Spring Application mit Hessian Remote-Zugriff Frameworks - Spring, Play, Blade, Vaadin & Co 4
S Spring Security Tutorial ohne Web application Frameworks - Spring, Play, Blade, Vaadin & Co 4
P Context initialization failed - mit Spring, JPA, Hibernate Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Start Stop Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
C Spring Webflow: URI Template variable in on-start Frameworks - Spring, Play, Blade, Vaadin & Co 0
engelsteufelin Taschenrechner springt an Start nach falscher Eingabe Frameworks - Spring, Play, Blade, Vaadin & Co 7
G Spring Thread start stop Frameworks - Spring, Play, Blade, Vaadin & Co 1

Ähnliche Java Themen

Neue Themen


Oben