怎样进行添加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支持的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!