• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Getter i Setter - problem z knfiguracją oauth

Object Storage Arubacloud
0 głosów
157 wizyt
pytanie zadane 27 czerwca 2019 w Java przez Eliro Stary wyjadacz (12,160 p.)

Usiłuję z tego filmu nauczyć się springa: Video

Kod źródłowy z filmu: https://github.com/arocketman/Spring-oauth2-jpa-example

Zmieniłem zależność w pliku pom.xml z

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>

na

 <dependency>
            <groupId>org.springframework.security.oauth.boot</groupId>
            <artifactId>spring-security-oauth2-autoconfigure</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>

Aby wyeliminować błąd z "can not resolve oauth2 symbol". Jednak wyrzucało mi błąd o nierozpoznawanej funkcji "getUsername, getPassword... itd". Więc kliknąłem w moim IDEA File->Settings->Plugins i zainstalowałem lombok plugin i zrestartowałem moje IDE. Zaimportowałem lombok i już żaden getter i setter nie wyświetla się na czerwono.

Wywala mi jednak błędy dotyczące tych plików:

C:\Users\Admin\Desktop\Spring-Blog\src\main\java\com\github\Spring\Blog\config\ResourceServerConfig.java
Error:(12, 12) java: class com.github.Spring.Blog.config.ResourceServerConfig is already defined in package com.github.Spring.Blog.config
C:\Users\Admin\Desktop\Spring-Blog\src\main\java\com\github\Spring\Blog\services\UserService.java
Error:(20, 53) java: cannot find symbol
  symbol:   method getPassword()
  location: variable user of type com.github.Spring.Blog.entities.User
C:\Users\Admin\Desktop\Spring-Blog\src\main\java\com\github\Spring\Blog\SpringBlogApplication.java
Error:(27, 55) java: constructor Role in class com.github.Spring.Blog.entities.Role cannot be applied to given types;
  required: no arguments
  found: java.lang.String
  reason: actual and formal argument lists differ in length
Error:(27, 73) java: constructor Role in class com.github.Spring.Blog.entities.Role cannot be applied to given types;
  required: no arguments
  found: java.lang.String
  reason: actual and formal argument lists differ in length
C:\Users\Admin\Desktop\Spring-Blog\src\main\java\com\github\Spring\Blog\services\CustomUserDetailsService.java
Error:(29, 26) java: cannot find symbol
  symbol:   method getUsername()
  location: variable u of type com.github.Spring.Blog.entities.User
Error:(30, 26) java: cannot find symbol
  symbol:   method getPassword()
  location: variable u of type com.github.Spring.Blog.entities.User
Error:(31, 26) java: cannot find symbol
  symbol:   method isActive()
  location: variable u of type com.github.Spring.Blog.entities.User
Error:(32, 26) java: cannot find symbol
  symbol:   method isActive()
  location: variable u of type com.github.Spring.Blog.entities.User
Error:(33, 26) java: cannot find symbol
  symbol:   method isActive()
  location: variable u of type com.github.Spring.Blog.entities.User
Error:(34, 26) java: cannot find symbol
  symbol:   method isActive()
  location: variable u of type com.github.Spring.Blog.entities.User
Error:(36, 34) java: cannot find symbol
  symbol:   method getRoles()
  location: variable u of type com.github.Spring.Blog.entities.User

i tych linijek:

public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
    public void save(User user){
        user.setPassword(passwordEncoder.encode(user.getPassword()));
        repo.save(user);
    }
	@Bean
	public CommandLineRunner setupDefaultUser(UserService service) {
		return args -> {
			service.save(new User(
					"user", //username
					"user", //password
					Arrays.asList(new Role("USER"), new Role("ACTUATOR")),//roles
					true//Active
			));
		};
	}
  @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        return repo
                .findByUsername(username)
                .map(u -> new org.springframework.security.core.userdetails.User(
                        u.getUsername(),
                        u.getPassword(),
                        u.isActive(),
                        u.isActive(),
                        u.isActive(),
                        u.isActive(),
                        AuthorityUtils.createAuthorityList(
                                u.getRoles()
                                        .stream()
                                        .map(r -> "ROLE_" + r.getName().toUpperCase())
                                        .collect(Collectors.toList())
                                        .toArray(new String[]{}))))
                .orElseThrow(() -> new UsernameNotFoundException("No user with "
                        + "the name " + username + "was found in the database"));
    }

}

O co z tym chodzi?

1 odpowiedź

+1 głos
odpowiedź 27 czerwca 2019 przez Aisekai Nałogowiec (42,190 p.)
wybrane 27 czerwca 2019 przez Eliro
 
Najlepsza

Zaznaczyłeś opcję: "Enable annotation processing" w Intellij (zakładka "Annotation Processors")?

Dodałeś adnotacje @Getter przy polach / @Data przy klasie? 

Błędy takie jak:

java: constructor Role in class com.github.Spring.Blog.entities.Role cannot be applied to given types;
  required: no arguments

wskazują, że jakaś klasa potrzebuje konstruktora bezargumentowego (w tym przypadku klasa Role) - ORM którego używasz (najprawdopodobniej Hibernate) wymaga tego ze względu na sposób tworzenia obiektów (podczas pobierania ich z bazy danych) https://stackoverflow.com/questions/2935826/why-does-hibernate-require-no-argument-constructor

Co do reszty: lepiej byłoby gdybyś wrzucił kod na Githuba bo:

Error:(12, 12) java: class com.github.Spring.Blog.config.ResourceServerConfig is already defined in package com.github.Spring.Blog.config

sugeruje, że pewnie masz klasę ResourceServerConfig z adnotacją @Configuration / @Component oraz w innej klasie @Configuration masz @Bean który zwraca ResourceServerConfig - nie mieszaj tak konfiguracji - albo @Component, albo @Bean. 

Dodatkowo:

.map(u -> new org.springframework.security.core.userdetails.User(

To nie wygląda dobrze, jeżeli potrzebujesz podawać klasę wraz z pakietem, zamiast importować jej "na górze pliku" to coś jest nie tak. Prościej byłoby gdybyś zrobił sobie klasę:

public class MyUserDetails implements UserDetails{
 //implementacje metod
}

a w niej pole i konstruktor z argumentem klasy User i tam po prostu robił coś na zasadzie:

getUsername(){
     return user.getUsername();
}

To:

new Role("USER")

zastąp sobie lepiej:

new Role(ROLE_USER)

gdzie ROLE_USER to zwykłe Enum. W Role sobie oadnotuj to pole @Enumerated(EnumType.String) - mniejsze ryzyko, że dostaniesz rolę, której nie ma w bazie danych. Dodatkowo, nie potrzebujesz potem konkatenacji żeby z USER zrobić ROLE_USER.

Podobne pytania

0 głosów
1 odpowiedź 382 wizyt
pytanie zadane 5 października 2020 w Java przez krystian1997 Obywatel (1,020 p.)
0 głosów
1 odpowiedź 210 wizyt
pytanie zadane 3 kwietnia 2019 w Java przez piki111 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,108 wizyt

92,539 zapytań

141,382 odpowiedzi

319,477 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...