我使用Spring-Security 5来保护我的Web应用程序。我访问/login. jsp并填写用户名和密码,然后单击“登录”提交表单,然后被重定向到/login. jsp。我看到fiddler中http流量的响应状态代码是302。
安全配置类:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private DataSource dataSource;
@Autowired
protected SecurityConfig(DataSource dataSource
) {
this.dataSource = dataSource;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.jsp")
.loginProcessingUrl("/login")
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("select name userName, password, enabled from user where name=?")
.authoritiesByUsernameQuery("select name userName 'ROLE_USER' from user where name=?")
;
}
}
login.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<c:url value="/login" var="loginUrl"/>
<form action="${loginUrl}" method="post"> 1
<c:if test="${param.error != null}"> 2
<p>
Invalid username and password.
</p>
</c:if>
<c:if test="${param.logout != null}"> 3
<p>
You have been logged out.
</p>
</c:if>
<p>
<label for="username">Username</label>
<input type="text" id="username" name="username"/> 4
</p>
<p>
<label for="password">Password</label>
<input type="password" id="password" name="password"/> 5
</p>
<button type="submit" class="btn">Log in</button>
</form>
</body>
</html>
5条答案
按热度按时间lx0bsm1f1#
这是因为spring默认的身份验证成功处理程序会寻找一个url来重定向。
我已经使用了下面,没有重定向发生.
然后定义bean并在configure方法中给予它以确保安全性
配置方法
kkih6yb82#
我遇到了这个问题,直到我在
configure (HttpSecurity)
方法中包含了.csrf().disable()
,关闭了csrf-check。如果你没有关闭它,那么就提供csrf标记作为隐藏的表单字段。......虽然我看到你把它关掉了
s1ag04yj3#
java配置:
超文本标记语言
您只需要通过http GET方法为“/login.html”编写控制器,将其余内容留给“spring”
文件https://docs.spring.io/spring-security/site/docs/5.3.6.RELEASE/reference/html5/#servlet-authentication-form
UsernamePasswordAuthenticationFilter
通过http POST method
与/login.html
匹配我的英语不好,希望我能帮助你
9avjhtql4#
我不知道这个问题是否总是活跃的,但如果这可以帮助别人...
对我有效的方法是
由
在我的Web安全配置适配器类中。
因此,我的安全配置如下所示:
vsikbqxv5#
使用successHandler将referer设置为true。这对我来说很有用。否则我也会得到302。
在securityConfig中需要添加下面的代码。
请检查以下链接:http://www.baeldung.com/spring-security-redirect-login