在使用Spring Security确保rest-api后,Spring Boot JS App无法运行

时间:2016-08-23 21:15:51

标签: spring spring-security spring-boot

我创建了一个简单的Spring Boot / JS应用程序。在下一步中,我尝试实现用户管理功能来处理多个用户。

所以我实现了一个用户模型和控制器,并通过spring security的身份验证来保护所有rest-api调用。

@Configuration
@EnableWebSecurity
@ComponentScan("package.packagename")
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
DataSource dataSource;
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception{

    auth.jdbcAuthentication().dataSource(dataSource)
            .usersByUsernameQuery("select email, password, active from accounts where email=?")
            .authoritiesByUsernameQuery("select email, role from account_roles where email=?");
}

@Override
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected void configure(HttpSecurity http) throws Exception {
        http
                .formLogin().permitAll()
                .and()
                .authorizeRequests()
                .antMatchers("/index.html",  "/").permitAll()
                .anyRequest().authenticated()
                .and()
                .logout();                    
    }
}

除此文件外,我还有SecurityWebApplicationInitializer

public class SecurityWebApplicationInitializer
    extends AbstractSecurityWebApplicationInitializer {

public SecurityWebApplicationInitializer() {
    super(SecurityConfig.class);
}
}

我现在的问题是,如果我启动应用程序并尝试通过localhost访问它:8080我面临404错误。 通常应用程序即使没有登录也应该工作,似乎启用了springsecurity,应用程序无法加载资源/公共目录中的js内容。

阅读日志显示如下:

  

在DispatcherServlet中找不到带有URI [/]的HTTP请求的映射,名称为“dispatcherServlet”

如果我在没有弹簧安全的情况下启动应用程序,它可以正常工作。

api-calls的安全工作就像一个魅力 - 我能够登录,接收cookie并使用此cookie来验证由springsecurity保护的api功能。

我希望你能帮助我解决我的(希望很小的)问题。

提前致谢

2 个答案:

答案 0 :(得分:0)

使用.formLogin()时,需要定义登录页面或使用.httpBasic()auth。所以你可以使用这样的东西:

    .formLogin()                      
        .and()
    .httpBasic();

    .formLogin()
        .loginPage("/login.html")

您可以在这里阅读更多内容

http://docs.spring.io/spring-security/site/docs/3.2.x/guides/form.html

http://www.baeldung.com/spring-security-login

答案 1 :(得分:0)

我发现我必须像这样添加一个WebConfig.java类:

import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter {

}

现在Spring能够正确解析/ call。我只需要确保为所有用户打开公共所有文件的访问权限(permitall()函数)。

无论如何,谢谢你的帮助: - )