怎样进行添加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支持的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。