您好我是Spring安全新手,我使用的是here提到的示例 通过Mkyong,我使用的是本教程中提供的基于注释的示例,但每当我在登录表单中输入值并单击下面的提交按钮时,它总是会出现异常。
type Status report
message Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.
description Access to the specified resource has been forbidden.
我试过google但没找到任何合适的答案,解决了这个问题。安全配置类在下面。
SecurityConfig.java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
@Qualifier("authenticationProvider")
AuthenticationProvider authenticationProvider;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/admin/**")
.access("hasRole('ROLE_USER')").and().formLogin()
.loginPage("/login").failureUrl("/login?error")
.usernameParameter("username")
.passwordParameter("password")
.and().logout().logoutSuccessUrl("/login?logout").and().csrf();
}
}
和
login.jsp表单位于
之下<form name='loginForm'
action="<c:url value='/login'/>" method='POST' enctype="multipart/form-data">
<table>
<tr>
<td>User:</td>
<td><input type='text' name='username'></td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='password' /></td>
</tr>
<tr>
<td colspan='2'><input name="submit" type="submit"
value="submit" /></td>
</tr>
</table>
<input type="hidden" name="${_csrf.parameterName}"
value="${_csrf.token}" />
</form>
请帮我解决这个问题。
答案 0 :(得分:4)
请将以下代码添加到您的安全配置中,看看它是否有任何差异
declare @parent table
(
[SEARCHID] [int] NOT NULL,
[COMPID] [int] NOT NULL,
[COMPPNO] [varchar](35) NOT NULL,
[PACKSIZE] [varchar](100) NOT NULL
)
DECLARE @CHILD TABLE
(
[SEARCHID] [int] NOT NULL,
[COMP_ID] [int] NULL,
[PROD_LINK] [varchar](500) NULL,
[SRPNO] [varchar](24) NULL
)
答案 1 :(得分:1)
问题在于多部分表单类型,您只需要使用此
<form name='loginForm'
action="<c:url value='/login'/>" method='POST'>
而不是你原来的
<form name='loginForm'
action="<c:url value='/login'/>" method='POST' enctype="multipart/form-data">
如果您需要将表单类型用作多部分表单,而不是将MultipartFilter添加到web.xml,以确保在Spring Security配置之前添加它:
<filter>
<display-name>springMultipartFilter</display-name>
<filter-name>springMultipartFilter</filter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>springMultipartFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>