怎样进行添加Spring-Security支持

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


网页名称:怎样进行添加Spring-Security支持
URL网址:http://azwzsj.com/article/ijjhje.html