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

Spring security angular logowanie

Object Storage Arubacloud
0 głosów
1,107 wizyt
pytanie zadane 19 kwietnia 2018 w Java przez LockeLamora Użytkownik (740 p.)

Witam, próbuje zrobić logowanie z bazą danych
Moje klasy

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter{

    @SuppressWarnings("deprecation")
    @Bean
    public static NoOpPasswordEncoder passwordEncoder() {
        return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
    }
    @Bean
    public UserDetailsService customUserDetailsService(){
        return new CustomUserDetailsService();
    }
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("user").password("pass").roles("USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.httpBasic().and()
                .logout().and()
                .csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and()
                .authorizeRequests().anyRequest().permitAll();
    }
}
@Component
public class CustomUserDetailsService implements UserDetailsService {

    private UserRepository userRepository;

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userRepository.findByUsername(username);
        if(user == null){
            throw new UsernameNotFoundException("User not found");
        }
        org.springframework.security.core.userdetails.User userDetails
                = new org.springframework.security.core.userdetails.User(
                        user.getUsername(),
                        user.getPassword(),
                        convertAuthorities(user.getRole())
        );
        return userDetails;
    }

    private Set<GrantedAuthority> convertAuthorities(String roles){
        Set<GrantedAuthority> authorities = new HashSet<>();
        authorities.add(new SimpleGrantedAuthority(roles));
        return authorities;
    }
}
'use strict';

angular.module('app', ['ngRoute'])
    .config(function ($routeProvider,$httpProvider) {
        $routeProvider
            .when('/login', {
                templateUrl: 'partials/login.html',
                controller: 'AuthenticationController',
                controllerAs: 'authController'
            })
        $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
    })
    .constant('LOGIN_ENDPOINT','/login')
    .service('AuthenticationService', function($http, LOGIN_ENDPOINT) {
        this.authenticate = function(credentials, successCallback) {
            var authHeader = {Authorization: 'Basic ' + btoa(credentials.username+':'+credentials.password)};
            var config = {headers: authHeader};
            $http
                .post(LOGIN_ENDPOINT, {}, config)
                .then(function success(value) {
                    $http.defaults.headers.post.Authorization = authHeader.Authorization;
                    successCallback();
                }, function error(reason) {
                    console.log('Login error');
                    console.log(reason);
                });
        }
        this.logout = function(successCallback) {
            delete $http.defaults.headers.post.Authorization;
            successCallback();
        }
    })
    .controller('AuthenticationController', function($rootScope, $location, AuthenticationService) {
        var vm = this;
        vm.credentials = {};
        var loginSuccess = function() {
            $rootScope.authenticated = true;
            $location.path('/');
        }
        vm.login = function() {
            AuthenticationService.authenticate(vm.credentials, loginSuccess);
        }
    });
<div >
    <h1>Please Login</h1>
    <form>
        <input type="text" ng-model="authController.credentials.username"><br>
        <input type="password" ng-model="authController.credentials.password"><br>
        <button ng-click="authController.login()">Login</button>
    </form>
</div>

Przy próbie zalogowania dostaje 404

A jak dodam taki kontroller ktory na spring.io ma mapping /user i ma zwracac 'currently authenticated user'

@RestController
public class AuthenticationController {

    @RequestMapping("/login")
    public Principal user(Principal user) {
        return user;
    }
}

To mogę się zalogować użytkownikiem którego mam inMemoryAuthentication() a jak chce się zalogować z bazy danych to dastaje 401

1 odpowiedź

0 głosów
odpowiedź 20 kwietnia 2018 przez Wiciorny Ekspert (270,110 p.)
401 Unauthorized

Nieautoryzowany dostęp – żądanie zasobu, który wymaga uwierzytelnienia

 404- będzie od strony sytuacji w której serwer nie znalazł zasobu w bazie danych więc coś w http jest niepoprawne

natomiast 401- podałem wyżej

Za mało kodu by tu coś doradzić. A używasz własnego: Controllera jako Rest, czy nie ? Dodatkowo 

if(user == null)

nie porównuj typu obiektowego do nula poprzez identyczność.... 

Podobne pytania

0 głosów
1 odpowiedź 1,043 wizyt
pytanie zadane 14 marca 2018 w Java przez Tomek Reda Obywatel (1,110 p.)
0 głosów
1 odpowiedź 869 wizyt
pytanie zadane 8 lutego 2018 w Java przez niezalogowany
0 głosów
2 odpowiedzi 418 wizyt
pytanie zadane 21 listopada 2018 w Java przez periedynek Obywatel (1,320 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 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!

...