温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样进行添加Spring-Security支持

发布时间:2021-12-02 16:45:37 来源:亿速云 阅读:337 作者:柒染 栏目:大数据

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

添加maven依赖:

怎样进行添加Spring-Security支持

添加配置

新建包config: SecurityConfig继承于WebSecurityConfigurerAdapter.

怎样进行添加Spring-Security支持

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,自定义认证

怎样进行添加Spring-Security支持

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

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

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

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

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

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

怎样进行添加Spring-Security支持

配置认证完成后的操作:

怎样进行添加Spring-Security支持

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

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

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

怎样进行添加Spring-Security支持

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

怎样进行添加Spring-Security支持

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

怎样进行添加Spring-Security支持

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

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

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

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

怎样进行添加Spring-Security支持

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

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

角色权限(Privilege)

怎样进行添加Spring-Security支持

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

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

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

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

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI