springboot的WEB开发笔记(SpringSecurity)

SpringSecurity

SpringSecurity官方使用文档:https://docs.spring.io/spring-security/site/docs/5.2.6.RELEASE/reference/htmlsingle/#jc

依赖添加

SpringSecurity配置的版本会受springboot的版本影响

thymeleaf-extras-springsecurity5是适用于2.0.9.RELEASE以上的

thymeleaf-extras-springsecurity4是适用于2.0.9.RELEASE以下的

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
    <version>3.0.4.RELEASE</version>
</dependency>

页面

页面适用thymeleaf-extras-springsecurity的配置

//thymeleaf-extras-springsecurity4的页面配置
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
//thymeleaf-extras-springsecurity5的页面配置
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">

sec的运用

//sec:authorize="!isAuthenticated()"进行一个是否登陆认证的验证,登陆认证则不显示
<div sec:authorize="!isAuthenticated()"><a th:href="@{/toLogin}">登陆</a></div>
//获取登陆用户的用户名
<span sec:authentication="name">
//获取登陆用户的权限,principal.authorities不可写成principal.getAuthorities()
<span sec:authentication="principal.authorities">
//根据用户权限判断是否显示
<div sec:authorize="hasRole('vip1')"></div>

授权

①进行WebSecurityConfigurerAdapter的扩展实现

②可以用http进行许多功能的配置

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    /**
     * 授权
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //请求授权的规则:首页都可以访问,其他页面需要对应权限
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/level1/**").hasRole("vip1")
                .antMatchers("/level2/**").hasRole("vip2");
        //没有权限就会到权限登陆页面
        http.formLogin();
        //注销
        http.logout().logoutSuccessUrl("/");
        //开启记住我
        http.rememberMe();
    }
}

授权的登陆页面为自定页面的操作有两种

①直接修改SecurityConfig类和页面表单提交的action,但这种方法具有缺点就是name=username/password需固定

http.formLogin().loginPage("/toLogin");
<form th:action="@{/toLogin}" method="post">

②loginPage为没有授权就会返回的登陆页面,loginProcessingUrl为处理页面的接口,usernameParameter,passwordParameter是网页传入的name值需要相对应

http.formLogin().loginPage("/toLogin").usernameParameter("username").passwordParameter("password").loginProcessingUrl("/login");

授权的自定义rememberMe

http.rememberMe().rememberMeParameter("remember");
<input type="checkbox" name="remember">remember Me

权限认证

springboot 2.1.X 可以直接使用

2.2.X以上的需要进行password的加密,以防反编译程序进行一个密码获取

/**
 * 认证
 * @param auth
 * @throws Exception
 */
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
            .withUser("admin").password(new BCryptPasswordEncoder().encode("123")).roles("vip1")
            .and()
            .withUser("root").password(new BCryptPasswordEncoder().encode("123")).roles("vip1","vip2");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值