使用一个配置类,继承 WebSecurityConfigurerAdapter这个类。
实现参数为http的config方法。 在方法里面可以配置具体的请求的加载方法(要放行还是认证) 具体的是
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.mvcMatchers("/hello").permitAll()
.anyRequest().authenticated()
.and().formLogin();
.and().formLogin().loginPage("/login.html")
.loginProcessingUrl("/doLogin")
.and().csrf().disable();
}
//自定义表单,用的是post提交方式
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org/">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" th:action="@{/doLogin}">
用户名<input type="text" name="username" ><br>
密码<input type="text" name="password" ><br>
<input type="submit" value="登录">
</form>
</body>
</html>
需要注意的是 提交方式为post,用户名和密码的字段的属性为"username" “password” 还有请求路径必须设置上,我们设置为"/doLogin"
如果是前后端分离的话,就需要传json数据格式的。 所以我们使用handler来实现, handler里面需要我们去重写方法,我们就写一个实现类,到时候直接new一个就可以。
public class MyAuthenticationFailureHandler implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
Map<String,Object> result = new HashMap<>();
result.put("msg","登录失败"+exception.getMessage());
result.put("code",500);
response.setContentType("application/json;character=UTF-8");
String s = new ObjectMapper().writeValueAsString(result);
response.getWriter().println(s);
}
}
使用的时候,直接在config配置类中使用就可以。
.failureHandler(new MyAuthenticationFailureHandler())
|