来一起学SpringSecurity:③认证,从自定义登录页面开始
使用Java配置类配置SpringSecurity
终于要开始配置SpringSecurity
la,鸡冻鸡冻!!
第一步、先找个漂亮的登录页面修改修改
比如我找的这个:https://down.shafish.cn/web/disanfanglogin.zip
,把它解压放在你的项目中,顺便把index.html改为login.html
配置login.html form标签内容
// 加上action和method <form class="login100-form validate-form" action="/doLogin" method="post"> ... </form>
修改用户名和密码的input.name属性值为username password
// username和password <input class="input100" type="text" name="username" placeholder="请输入用户名" autocomplete="off"> <input class="input100" type="password" name="password" placeholder="请输入密码">
登录按钮加上提交type
// submit <button class="login100-form-btn" type="submit">登 录</button>
OK
第二步、开始配置SpringSecurity
首先继承WebSecurityConfigurerAdapter
这个抽象类,这个类可以让你方便+简单地配置出安全的项目。
@Configuration
public class MySecurityConfig extends WebSecurityConfigurerAdapter {
// 密码加盐算法,每次都会加不同的盐,保证密码安全可靠
// BCryptPasswordEncoder提供了密码匹配方法,100%避免了密码明文存储
@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
/**
* 配置用户认证信息,会覆盖application.yml中的设置,所以把上一篇在application.yml
* 中设置的东西删掉就可以了,这里要做密码加密。安全感大大地提高了呢
* @param auth
* @throws Exception
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("shafish")
.password(passwordEncoder().encode("123456"))
.roles("ADMIN");// 用户的角色,随便写,也可以不写
}
/**
* 放行web静态资源,浏览器要用来渲染页面,就没必要拦截
* @param web
* @throws Exception
*/
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/js/**","/css/**",
"/images/**","/vendor/**","/fonts/**");
}
/**
* 认证和授权方面配置
* @param http
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// 设置登录页面
.formLogin().loginPage("/login.html")
// 配置登录接口,对接form表单的action请求
.loginProcessingUrl("/doLogin")
// 登录成功后跳转到/loginSuccess接口
// defaultSuccessUrl可以记录用户登录前的请求路径,
// 登录成功后就不会跳转到默认登录成功页面
.defaultSuccessUrl("/loginSuccess")
// 对所有人开放上面的接口
.permitAll()
.and()
// 配置注销操作,注销了就跳转到登录页
.logout().logoutSuccessUrl("/login.html")
.and()
// 所有其他请求都需要登录权限
.authorizeRequests().anyRequest()authenticated()
.and()
// 现在先禁用跨域
.csrf().disable();
}
}
/doLogin
接口进行账号密码认证,现在暂时交给框架处理,我们就只需要定义就好。那就只剩下/loginSuccess
,来吧
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello";
}
// 简单明了
@RequestMapping("/loginSuccess")
public String loginSuccess() {
return "登录成功";
}
}
启动项目!
- 访问
http://localhost:8080/login.html
输入shafish
123456
就可以看到输出 ->登录成功 - 我们还开启了注销接口,登录成功后试试访问
http://localhost:8080/logout
ok,在这一篇文章里,你学会了在项目中写一个漂亮的html登录页面,也能够用SpringSecurity
处理登录接口la,不错哟☜(゚ヮ゚☜)
温馨提示:例子可以在 https://gitee.com/shafish/demo/tree/springsecurity1/ 找到