Spring Security HTTP FormLogin

时间:2016-12-09 21:13:16

标签: spring security http spring-boot

我的Spring Security存在问题

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UsuarioService usuarioService;

    @Autowired
    private PasswordEncoder passwordEncoder;

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

        // @formatter:off

        http
                .authorizeRequests()
                    .antMatchers(
                            "/",
                            "/index/**",
                            "/register",
                            "/doregister",
                            "/login",
                            "/dologin",
                            "/logout-success",
                            "/confirmregister",
                            "/invaliduser",
                            "/expiredtoken",
                            "/userstatuslog",
                            "/verifyemail")
                    .permitAll()
                        .anyRequest()
                            .authenticated()
            .and()
                .authorizeRequests()
                    .antMatchers(
                            "/login",
                            "logout")
                    .permitAll()
            .and()
                .authorizeRequests()
                    .antMatchers(
                            "/static/css/**",
                            "/css/custom.css",
                            "/js/**",
                            "/images/**"
                            )
                        .permitAll()
            .and()
                .authorizeRequests()
                    .antMatchers(
                            "/forbidden",
                            "/edit-profile-about",
                            "/doeditprofileabout",                      
                            "/profile"
                            )
                    .hasRole("USER")
            .and()
                .authorizeRequests()
                    .antMatchers(
                            "/controlpanel",
                            "/forbidden",
                            "/edit-profile-about",
                            "/doeditprofileabout",                      
                            "/profile"
                            )
                    .hasRole("ADMIN")
            .and()
                .formLogin()
                    .loginPage("/login")
                        .defaultSuccessUrl("/")
                            .permitAll()
            .and()
                .logout()
                    .deleteCookies("remove")
                        .invalidateHttpSession(true)
                            .logoutUrl("/logout")
                .logoutSuccessUrl("/logout-success")
                    .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));

        // @formatter:on
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.userDetailsService(usuarioService).passwordEncoder(passwordEncoder);
    }

每次,我登录它都会把我发送到bootstrap文件...

  

本地主机:8080 / CSS /自举-3.3.7-DIST / CSS / bootstrap.min.css

...或

  

本地主机:8080 / CSS / custom.css

...或

  

本地主机:8080 / JS / jQuery的2.1.4.min.js

但不是同一个(似乎是随机的!: - )

然后有时 CSS 有效,有时则无效。在登录表单中它没有样式,但有时只有,因为当我运行应用程序时,它有样式。当我也登录时,但不是当我退出或尝试再次登录时。因此,当用户正确登录时,它再次具有样式。

当我尝试使用用户(使用ROLE_USER)访问“/ controlpanel”时,它允许访问(并且它不应该),但是当我使用用户(Role_ADMIN)时,它可以正常工作。

2 个答案:

答案 0 :(得分:0)

问题是guest虚拟机无法访问您的css文件。登录后,您将被重定向回到它。有时登录页面中的css因浏览器缓存而起作用。

尝试将配置更改为

http
    .authorizeRequests()
        .antMatchers(
                "/",
                "/index/**",
                "/register",
                ...).permitAll()
        .antMatchers(
                "/login",
                "logout").permitAll()
        .antMatchers(            // You need to add all css file here
                "/static/css/**",
                "/css/custom.css",
                "/css/bootstrap-3.3.7-dist/css/bootstrap.min.cs‌​‌​‌​s",
                "/js/**",
                "/images/**").permitAll()
        .antMatchers(
                "/forbidden",
                "/edit-profile-about",
                "/doeditprofileabout",                      
                "/profile").hasRole("USER")
        .antMatchers(
                "/controlpanel",
                "/forbidden",
                "/edit-profile-about",
                "/doeditprofileabout",                      
                "/profile").hasRole("ADMIN")
        .anyRequest().authenticated()
    .and()
        ...

答案 1 :(得分:0)

当您的静态资源被Spring Security过滤时会发生这种情况。

尽量忽略这些资源:

@Override
        public void configure(WebSecurity web) throws Exception {
            web.ignoring().antMatchers("/path/**");
        }

定义模式以满足您的所有位置。