我创建了一个简单的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功能。
我希望你能帮助我解决我的(希望很小的)问题。
提前致谢
答案 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
答案 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()函数)。
无论如何,谢谢你的帮助: - )