1. 程式人生 > 其它 >spring security 自定義登陸介面

spring security 自定義登陸介面

技術標籤: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());