怎样进行添加Spring-Security支持

2023-05-15

怎样进行添加Spring-Security支持,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

添加maven依赖:

添加配置

新建包config: SecurityConfig继承于WebSecurityConfigurerAdapter.

configure(HttpSecurity http)方法: 在该方法内配置web路径和对应的权限

    http.authorizeRequests().antMatchers(...): 配置web路径

    permitAll(),.hasRole(),.hasAnyRole: 配置web路径对应的权限.

    例如: .antMatchers("/manage/**").hasRole("ADMIN")

    表示路径/manage下的所有地址和资源,需要具有ROLE_ADMIN角色的用户才能访问.

    .formLogin().loginPage("/login")   // 指定了登录页面

    .successForwardUrl("/sign_in").failureUrl("/sign_in")

    指定spring-security认证完成(成功/失败)后回调的路径(GET),该路径通常是我们自己的controller方法,方法里可以定义登录反馈,具体见项目代码.

    .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/").permitAll(): 定义注销的路径,并且所有用户都可访问该方法.

configure(AuthenticationManagerBuilder auth): 在该方法内配置自定义的安全认证类

    auth.authenticationProvider(securityEncrypt): 自定义认证

    auth.userDetailsService(customUserService): 自定义认证用户信息服务

至此,路径已经具备安全特性了.下面介绍登录认证和用户角色资源管理

登录认证流程

    SecurityConfig.configure: 查找用户认证提供者->SecurityEncrypt

    SecurityEncrypt.authenticate: 认证用户凭证

        CustomUserService.loadUserByUsername: 加载用户数据库用户信息

        密码匹配:

            失败: 抛出认证异常

            成功: 返回认证用户信息

实际项目中的密码是经过加密的,所以需要自定义认证方案,本项目使用BCrypt加密方式,具体代码见EncryptUtil工具类.

创建类: SecurityEncrypt,自定义认证

authenticate(Authentication authentication): 该方法将对用户输入信息进行匹配

    authentication.getName(): 用户输入的用户名

    authentication.getCredentials(): 用户输入的密码

    UserDetails user = userService.loadUserByUsername(username): 通过用户名加载数据库用户信息

    认证完成后(成功/失败)回调 /sign_in.

创建类: CustomUserService,自定义加载数据库用户信息,同时加载用户的角色和角色对资源的访问权限信息.

配置认证完成后的操作:

principal: 已认证对象,null表示认证失败

SPRING_SECURITY_SAVED_REQUEST: spring-security保存到session中的属性,保存了认证前的页面.如果该属性不为null,可以传递给页面让js跳转,即实现了认证后跳转到认证前的页面.

配置某个方法的访问权限:

@PreAuthorize: 在方法执行前将会检查用户是否具有对应的权限,可选值:

Thymeleaf页面中配置权限: hello.html

xmlns:sec="http://www.thymeleaf.org/extras/spring-security": 导入security标签

sec:authorize="hasRole('USER')": 显示该对象需要具有该权限

github项目中,我定义了两个用户角色和两个资源访问权限

角色(Roles): 注意: spring-security中用户角色默认前缀是ROLE_,后面配置时不要加.

ROLE_USER: 表示已登录用户,注册用户时自动赋予该角色

ROLE_ADMIN: 目前项目中的最高权利角色

角色权限(Privilege)

user:* 表示已注册用户资源访问权限,对应ROLE_USER

global:* 表示最高权限,该类型用户可以访问所有资源,对应ROLE_ADMIN

项目启动时会自动初始化相关权限.

本项目添加了简要的后台管理,用以保存公众号的文章信息

看完上述内容,你们掌握怎样进行添加Spring-Security支持的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注本站行业资讯频道,感谢各位的阅读!

《怎样进行添加Spring-Security支持.doc》

下载本文的Word格式文档,以方便收藏与打印。