2016-11-30 4 views
-1

Ich habe eine Spring Boot App erstellt und ich habe meine Front-End-App im Ordner /resources/static.Sichere eine Angular JS App mit Spring Security

Für das Routing verwende ich Angular JS UI Router-Bibliothek. Ich habe eine Route definiert, auf die ich nur vom Administrator zugreifen möchte, und jetzt versuche ich, sie mit Spring Security zu sichern.

Hier ist meine WebSecurity Konfigurationsklasse:

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { 

@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
    auth 
     .inMemoryAuthentication() 
      .withUser("user").password("password").roles("USER").and() 
      .withUser("admin").password("password").roles("USER", "ADMIN"); 
} 

    @Override 
    protected void configure(HttpSecurity httpSecurity) throws Exception { 
     httpSecurity 
     .authorizeRequests() 
     .antMatchers(HttpMethod.GET, "/#/admin").hasRole("ADMIN") 
     .and() 
     .formLogin() 
     .and() 
     .authorizeRequests() 
     .antMatchers(HttpMethod.POST, "/member", "/member/**").permitAll() 
     .antMatchers(
       HttpMethod.GET, 
       "/", 
       "/*.html", 
       "/favicon.ico", 
       "/**/*.html", 
       "/**/*.css", 
       "/**/*.js", 
       "/**/**/*.css", 
       "/**/**/*.js", 
       "/**/**/*.html", 
       "/**/**/**/*.css", 
       "/**/**/**/*.js", 
       "/**/**/**/*.html", 
       "/**/**/**/**/*.css", 
       "/**/**/**/**/*.js"   
    ).permitAll() 
     .antMatchers("/auth/**", "/member/**", "/account/**").permitAll() 

     .and() 
     .csrf().disable(); 

    } 
} 

Der Weg, den ich zu sichern versuche kann durch http://localhost:8080/#/admin zugegriffen werden.
Wenn ich jedoch auf diese Route zugreife, wird keine Anmeldung angefordert und die Seite kann von jedem eingesehen werden.
Ist es da ein anderer Ansatz, dem ich folgen sollte?

Antwort

1

Die URL: http://localhost:8080/#/admin wird anstelle der /#/admin Regel / in Ihrer permitAll Liste abgebildet, da #/admin Teil nur URL-Fragment ist, und in der Regel nicht das Geschäft der Server-Seite.

Sie müssen ein API zwischen Ihrem Frontend und Backend definieren. In der Regel in RESTful Web-Services-Formular und dienen bei /api/* Pfad. Sichern Sie den Pfad und lassen Sie Ihr Frontend nur über diese APIs mit Ihrem Backend kommunizieren.

0

Es ist eaiser Ihr Problem zu beheben,

aktualisiert

.antMatchers(HttpMethod.GET, "/#/admin").hasRole("ADMIN") 

Um

.antMatchers(HttpMethod.GET, "/#/admin").hasRole("ADMIN").anyRequest().authenticated() 

Für jeden Matcher, müssen Sie immer mit permitAll() oder authenticated() dafür.

+0

Das funktionierte, aber jetzt sollte ich mich anmelden, um Zugriff auf alle Endpunkte zu haben, obwohl sie vorher verfügbar waren –

Verwandte Themen