我试图用Spring security实现一个简单的登录页面。无论我做什么,当提交表单输入时,我总是得到一个错误< code > Error 405 Request method ' POST ' supported 。相关文件:< br>
SecurityConfig.java:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
@Autowired
public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception
{
auth.inMemoryAuthentication().withUser("admin").password("abc123").roles("ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.authorizeRequests()
.antMatchers("/", "/thank-you", "/faq", "/legal", "/policy").permitAll()
.antMatchers("/admin/**").access("hasRole('ADMIN')")
.and().formLogin().loginPage("/login")
.usernameParameter("ssoId").passwordParameter("password")
.and().csrf()
.and().exceptionHandling().accessDeniedPage("/");
}
}
SecurityWebApplicationInitializer.java:
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer
{
}
我的控制器的一部分:
@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView loginPage( )
{
return new ModelAndView("WEB-INF/views/login");
}
绒球.xml:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
login.jsp:
<form action="/login" method="post">
<div>
<label for="j_username">Username</label> <br>
<input type="text" class="form-control" id="j_username" name="ssoId" required />
</div>
<div>
<label for="j_password">Password</label> <br>
<input type="password" class="form-control" id="j_password" name="password" required />
</div>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
<div class="form-actions">
<input type="submit" value="Log in" />
</div>
我认为问题出在我的$(_csrf.parameter名称}和${_csrf.token}在检查它们时都是空的。如果您需要任何额外的信息,我很乐意提供。
没有登录页面的许可?
.antMatchers("/login").permitAll()
我给你一些登录页面的例子:
http
.authorizeRequests()
.antMatchers("/login").permitAll()
.antMatchers("/**").fullyAuthenticated()
.and()
.requiresChannel().anyRequest().requiresSecure().and()
.formLogin().loginPage("/login").defaultSuccessUrl("/main", true)
.failureUrl("/login.do?error")
.usernameParameter("username").passwordParameter("password")
所以,我已经想通了。我对问题中的代码进行了以下更改: 在网络中.xml
我必须添加:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
login.jsp:
<form name='loginForm' action="/login" method='POST'>
<div>
<label for="username">Username</label> <br>
<input type="text" class="form-control" id="username" name="username" required />
</div>
<div>
<label for="password">Password</label> <br>
<input type="password" class="form-control" id="password" name="password" required />
</div>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
<div class="form-actions">
<input type="submit" value="Log in" />
</div>
安全配置.java:
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.authorizeRequests()
.antMatchers("/", "/login").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.and()
.formLogin().loginPage("/login")
.defaultSuccessUrl("/admin").failureUrl("/login")
.and()
.csrf();
}
希望它能帮助有类似需求的人。
我知道这是一个3年前的问题,但我的答案可以帮助别人。所以,我也有过这种情况;而且我发现SpringCSRF不允许POST方法。我所做的是禁用CSRF,并手动发送CSRF令牌,如下所示:
@Override
protected void configure(HttpSecurity http) throws Exception{
http.authorizeRequests()
.antMatchers("/", "/login").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.and()
.formLogin().loginPage("/login")
.defaultSuccessUrl("/admin").failureUrl("/login")
.and()
.csrf().disable();
}
并在JSP文件中:
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
具有状态405和身份验证的页面不工作。 来自 Spring 引导日志的错误 o.s.web.servlet.不支持请求方法POST jsp页面出错: 白标错误页面 该应用程序没有针对/error的显式映射,因此您可以将它视为一个后备。 出现意外错误(类型=不允许方法,状态=405)。不支持请求方法“POST” Spring信息: -使用Spring Security 3.2.5 -使用Spring
我正试图建立一个REST客户端,使用的是我的Web服务的Faignes。Web服务是使用Spring 4构建的,配置为xml bean。 该项目是用Maven构建的,并使用子模块进行结构化 为了启用外部客户机,我创建了一个在SpringXML配置上启用的带注释类。 Springxml 装模作样。JAVA 然后我创建了一个Faignes客户端,并使用注释进行配置 FooClient。JAVA API
我在这里检查了这么多相同的答案,但似乎没有什么适合我。我有Spring mvc的Spring Security性。当我的用户尝试注册时,我正在向我的控制器发送帖子数据。但它给我405帖子不支持我在安全配置中禁用了csrf令牌。请让我知道我哪里出错了?这是我的webSecurityCon 这是我的注册页面 这是我的主控制器 这是我的签名信息。
问题内容: 我收到此错误: 我正在尝试做的是创建一个带有下拉框的表单,该表单会根据在另一个下拉框中选择的其他值进行填充。例如,当我在框中选择一个名称时,应运行.jsp页面中的函数,然后提交提交的页面,然后在框中再次加载相应的值。 但是我收到此HTTP状态405错误。我在互联网上搜索了解决方案,但找不到任何有帮助的方法。这是我的代码的相关部分: jsp页面的一部分 控制器的一部分: 我怎么会得到这个
我收到这个错误:< code>HTTP状态405 -不支持请求方法“POST ” 我想做的是创建一个带有下拉框的表单,该下拉框根据在另一个下拉框中选择的其他值进行填充。例如,当我在框中选择一个名称时,应该运行. jsp页面中的函数,然后提交的页面再次加载框中的相应值。 但是我收到此HTTP状态405错误。我已经在互联网上搜索了解决方案,但找不到任何有帮助的东西。以下是我的代码的相关部分: jsp页
我有Spring MVC的Spring Security。当我尝试注册时,它给了我405个不支持的“帖子”。我已在安全配置中禁用csrf令牌。让我知道我哪里出错了? 我的登录页面: 授权由LoginController处理: 这是我的Spring Security配置类: