Spring安全性没有阻止所有请求

时间:2014-05-22 19:01:59

标签: spring spring-security

我正在使用Spring security 3.2并具有此配置:

@Override
protected void configure(HttpSecurity http) throws Exception {      
    http
            .headers()
                .addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsMode.SAMEORIGIN))
                .and()
            .exceptionHandling()
                .authenticationEntryPoint(authenticationEntryPoint)
                .and()
            .rememberMe()
                .rememberMeServices(rememberMeServices())
                .key(env.getProperty("security.rememberme.key"))
                .and()
            .formLogin()
                .loginProcessingUrl("/app/authentication")
                .successHandler(ajaxAuthenticationSuccessHandler)
                .failureHandler(ajaxAuthenticationFailureHandler)
                .usernameParameter("j_username")
                .passwordParameter("j_password")
                .permitAll()
                .and()
            .logout()
                .logoutUrl("/app/logout")
                .logoutSuccessHandler(ajaxLogoutSuccessHandler)
                .deleteCookies("JSESSIONID")
                .permitAll()
                .and()
            .addFilter(basicAuthenticationFilter(basicAuthenticationEntryPoint(), authenticationManager()))
            .csrf()
                .disable()
            .authorizeRequests()
                .antMatchers("/login/**").permitAll()
                .antMatchers("/logout/**").permitAll()                
                .antMatchers("/super_admin/**").hasRole("ADMIN")
                .antMatchers("/administration/**").hasRole("ADMIN")
                .antMatchers("/*").permitAll()
                .antMatchers("/app/**").authenticated();

当我以具有角色ADMIN的用户身份登录并且我正在访问http://mydomain:8080/super_adminhttp://mydomain:8080/#/administration时,这不会被阻止。 (工作正常)

但是,如果我以没有角色ADMIN的用户身份登录,则会阻止http://mydomain:8080/super_admin,但我仍然可以访问http://mydomain:8080/#/administration。 #有问题吗? 我如何阻止http://mydomain:8080/#/administration

感谢您的任何反馈。

2 个答案:

答案 0 :(得分:1)

#之后的值未发送到服务器。您必须使用一些JavaScript来检查用户是否可以访问该页面。

答案 1 :(得分:0)

Evgeni是正确的,#之后的值称为URL的片段或锚点部分,并且由Web浏览器而不是服务器使用。

片段网址http://en.wikipedia.org/wiki/Hurricane_Ginger#Impact的示例。此链接将带您进入Hurricane_Ginger标题Impact