TTrack – RestController

transfer

Zmagania konkursowe zbilżają się ku końcowi, ostatnio wystawiłem api z którego korzystać będzie aplikacja mobilna.


 
 
 
 
 

RestController

 

W ostatnim czasie udało się wystawić restowe api dla aplikacji mobilnej. Na tą chwilę udostępniam tam wszystkie informacje o taskach dla danego pracownika. Testuje api za pomocą wtyczki do chroma Postman. Tak to wygląda gdy chcemy się dostać do api bez autoryzacji:

 

 

a tak gdy mamy konto:

 

Możemy się zalogować jako pracownik. Był mały problem z podwójną autoryzacją (jedna jest do webowej aplikacji jako boss:)) a druga do wystawionego api jako pracownik ale udało się rozwiązać ten problem:). W takiej sytuacji należy wykorzystać adnotacje @Order() a nasze konfiguracje umieścić w statycznych klasach, przykład poniżej.

 

Multiple Authorization

 

@EnableWebSecurity
public class SecurityConfig {

    @Configuration
    @Order(1)
    public static class RestApiSecurityConfig extends WebSecurityConfigurerAdapter {

        private String REALM="MY_TEST_REALM";

        @Qualifier("employerServiceRestApi")
        @Autowired
        private UserDetailsService employerDetailsServiceImpl;

        @Autowired
        public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(employerDetailsServiceImpl);
        }

        @Override protected void configure(HttpSecurity http) throws Exception {

            http
                    .antMatcher("/restApi/**")
                    .csrf()
                    .disable()
                    .authorizeRequests().antMatchers("/restApi/**").hasRole("USER").and()
                    .httpBasic().realmName(REALM).authenticationEntryPoint(getBasicAuthEntryPoint()).and()
                    .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                    .exceptionHandling().authenticationEntryPoint(getBasicAuthEntryPoint());
        }

        @Bean
        public CustomBasicAuthenticationEntryPoint getBasicAuthEntryPoint(){
            return new CustomBasicAuthenticationEntryPoint();
        }
    }

    @Configuration
    @Order(2)
    public static class SecurityConfiguration extends WebSecurityConfigurerAdapter {

        @Autowired
        @Qualifier("customUserDetailsService")
        UserDetailsService userDetailsService;

        @Autowired
        PersistentTokenRepository tokenRepositoryUser;

        @Autowired
        public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(userDetailsService);
            auth.authenticationProvider(authenticationProvider());
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {

            http.authorizeRequests().antMatchers("/list")
                    .access("hasRole('ADMIN') or hasRole('DBA')")
                    .antMatchers("/newuser/**", "/delete-user-*", "/manage-employer-*")
                    .access("hasRole('ADMIN')")
                    .antMatchers("/edit-user-*")
                    .access("hasRole('ADMIN') or hasRole('DBA')").and().formLogin().loginPage("/login")
                    .loginProcessingUrl("/login").usernameParameter("ssoId").passwordParameter("password").and()
                    .rememberMe().rememberMeParameter("remember-me").tokenRepository(tokenRepositoryUser)
                    .tokenValiditySeconds(86400).and().csrf().and().exceptionHandling().accessDeniedPage("/Access_Denied");

        }

        @Bean
        public PasswordEncoder passwordEncoder() {
            return new BCryptPasswordEncoder();
        }

        @Bean
        public DaoAuthenticationProvider authenticationProvider() {
            DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
            authenticationProvider.setUserDetailsService(userDetailsService);
            authenticationProvider.setPasswordEncoder(passwordEncoder());
            return authenticationProvider;
        }

        @Bean
        public PersistentTokenBasedRememberMeServices getPersistentTokenBasedRememberMeServices() {
            PersistentTokenBasedRememberMeServices tokenBasedservice = new PersistentTokenBasedRememberMeServices(
                    "remember-me", userDetailsService, tokenRepositoryUser);
            return tokenBasedservice;
        }

        @Bean
        public AuthenticationTrustResolver getAuthenticationTrustResolver() {
            return new AuthenticationTrustResolverImpl();
        }
    }
}

Teraz będe pracował nad aplikacją mobilną wykorzystam ten szablon z mvp z poprzedniego postu:). A tutaj kody.

Cześć:).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *