我有一个项目,我已经实施了弹簧安全性。每当我尝试使用登录页面时,我都会得到405响应'请求方法' POST'不支持'。我已经在网上搜索了一个解决方案,据我所知,唯一的解决方案是禁用csrf。我已经禁用了csrf,但我仍然收到相同的405响应。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
private BCryptPasswordEncoder encoder;
@Autowired
private DataSource dataSource;
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource())
.usersByUsernameQuery(
"select username, password, enabled from user where username=?")
.authoritiesByUsernameQuery(
"select user_username, role from user_roles where user_username=?").passwordEncoder(encoder);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.html").usernameParameter("username").passwordParameter("password")
.loginProcessingUrl("/mylogin")
.successForwardUrl("/test.html")
.permitAll()
.and()
.csrf().disable();
}}
<form action="/mylogin" method="post" name="login" id="login">
<div>
<span>username</span>
<input type="text" placeholder="Username" name="username">
</div>
<br/>
<div>
<span >password</span>
<input type="password" placeholder="Password" name="password">
</div>
<br/>
<div>
<input type="submit" value="send">
</div>
我错过了什么吗?
@SpringBootApplication
@EntityScan("com.myapp")
@EnableJpaRepositories("com.myapp")
@ComponentScan({"com.myapp"})
public class MySystemApplication {
public static void main(String[] args) {
SpringApplication.run(MySystemApplication.class, args);
}
}
答案 0 :(得分:0)
我必须建议您启用csrf。除非你想在开发环境中尝试一些东西,否则永远不要禁用它。请记住在测试其他任何网站容易发生跨网站请求伪造攻击之后立即启用它。
因此启用csrf并添加
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
到login.jsp
中的表单OR
最好始终使用弹簧标签
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="f"%>
表单
<f:form></f:form>
因此您不必担心记住将csrf令牌标记添加到表单中,因为Spring默认会自动执行此操作。这是最好的做法。