spring security 自定義登陸介面
阿新 • • 發佈:2020-12-21
技術標籤:spring
spring security 自定義登陸介面
1.自定義config並繼承WebSecurityConfigurerAdapter
@Configuration
@EnableWebSecurity
public class MyConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//super.configure(http);
http.
// 哪些 地址需要登入
authorizeRequests()
//所有請求都需要驗證
.anyRequest().authenticated()
.and()
//permitAll 給沒登入的 使用者可以訪問這個地址的許可權
//自定義登入頁
.formLogin().loginPage("/login.html")
.loginProcessingUrl("/login").permitAll()
// 登入失敗 頁面
.failureUrl("/login.html?error")
// 登入成功跳轉的頁面
.defaultSuccessUrl( "/ok",true).permitAll()
.failureHandler(new AuthenticationFailureHandler() {
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
AuthenticationException exception) throws IOException, ServletException {
// TODO Auto-generated method stub
exception.printStackTrace();
// 判斷異常資訊 跳轉不同頁面 比如 密碼過期重置
request.getRequestDispatcher(request.getRequestURL().toString()).forward(request, response);
// 記錄登入失敗次數 禁止登入
}
})
//預設 所有的post請求 都會攔截
.and()
.csrf()
.csrfTokenRepository(new HttpSessionCsrfTokenRepository());
}
}
2.登陸介面
<head xmlns:th="http://www.w3.org/1999/xhtml">
<body>
<form action="/login" method="post">
使用者名稱:<input name="username" type="text"></br>
密碼:<input name="password" type="password"></br>
csrf token:<input th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
<button type="submit">提交</button>
</form>
</body>
</head>
3.定義controller
@Controller
public class LoginController {
@GetMapping("/login.html")
public String login() {
return "login";
}
@GetMapping("/ok")
public String ok(){
return "ok";
}
}
4.application.properties
server.port=8080
spring.security.user.name=aa
spring.security.user.password=bb
5.page
注意:
這裡配置了csrf token, 因為post請求預設開啟了csrf.
csrf().csrfTokenRepository(new HttpSessionCsrfTokenRepository());