Spring Security(一)

Posted 来福啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Security(一)相关的知识,希望对你有一定的参考价值。

即使没有任何网站登录验证功能编码基础的人,也能想出下面的这个功能需求:

  1. 网站分为首页、登录页、用户页面、管理员页面和报错页面;
  2. 使用用户名加密码登录,登录错误要报错;
  3. 不同的用户拥有不同的权限,不同的权限可以访问不同的网页;
  4. 首页和登录页不需要任何权限;
  5. 用户页面需要USER权限;
  6. 管理员页面需要ADMIN权限;
  7. 如果用户没有登录,则访问需要权限的页面时自动跳转登录页面。


1. AuthenticationManagerBuilder 身份验证管理器生成器(那意思就是:生成一个身份验证管理器)

2. BCryptPasswordEncoder 密码编码器(BCrypt跨平台文件加密工具,BCryptPasswordEncoder就是一种加密手法)

3.inMemory在内存中

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        /**
         * 在内存中创建一个名为 "user" 的用户,密码为 "pwd",拥有 "USER" 权限,密码使用BCryptPasswordEncoder加密
         */
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                .withUser("user").password(new BCryptPasswordEncoder().encode("pwd")).roles("USER");
        /**
         * 在内存中创建一个名为 "admin" 的用户,密码为 "pwd",拥有 "USER" 和"ADMIN"权限
         */
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                .withUser("admin").password(new BCryptPasswordEncoder().encode("pwd")).roles("USER","ADMIN");
    }

4.permitAll():允许所有用户访问,不需要任何权限

authorize:授权;批准  authorizeRequests()授权请求

/**
     * 匹配 "/","/index" 路径,不需要权限即可访问
     * 匹配 "/user" 及其以下所有路径,都需要 "USER" 权限
     * 匹配 "/admin" 及其以下所有路径,都需要 "ADMIN" 权限
     * 登录地址为 "/login",登录成功默认跳转到页面 "/user"
     * 退出登录的地址为 "/logout",退出成功后跳转到页面 "/login"
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/","/index","/error").permitAll()
                .antMatchers("/user/**").hasRole("USER")
                .antMatchers("/admin/**").hasRole("ADMIN")
                .and()
                .formLogin().loginPage("/login").defaultSuccessUrl("/user")
                .and()
                .logout().logoutUrl("/logout").logoutSuccessUrl("/login");
    }

5.技术图片

完整代码:

/**
 * Author:      wxb
 * Project:     spring_security_example
 * Create Date: 2018/10/18
 * Create Time: 17:36
 * Description: Security 配置类
 */
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        /**
         * 在内存中创建一个名为 "user" 的用户,密码为 "pwd",拥有 "USER" 权限,密码使用BCryptPasswordEncoder加密
         */
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                .withUser("user").password(new BCryptPasswordEncoder().encode("pwd")).roles("USER");
        /**
         * 在内存中创建一个名为 "admin" 的用户,密码为 "pwd",拥有 "USER" 和"ADMIN"权限
         */
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                .withUser("admin").password(new BCryptPasswordEncoder().encode("pwd")).roles("USER","ADMIN");
    }

    /**
     * 匹配 "/","/index" 路径,不需要权限即可访问
     * 匹配 "/user" 及其以下所有路径,都需要 "USER" 权限
     * 匹配 "/admin" 及其以下所有路径,都需要 "ADMIN" 权限
     * 登录地址为 "/login",登录成功默认跳转到页面 "/user"
     * 退出登录的地址为 "/logout",退出成功后跳转到页面 "/login"
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/","/index","/error").permitAll()
                .antMatchers("/user/**").hasRole("USER")
                .antMatchers("/admin/**").hasRole("ADMIN")
                .and()
                .formLogin().loginPage("/login").defaultSuccessUrl("/user")
                .and()
                .logout().logoutUrl("/logout").logoutSuccessUrl("/login");
    }
}









1

以上是关于Spring Security(一)的主要内容,如果未能解决你的问题,请参考以下文章

Spring security实现国际化问题

web应用安全框架选型:Spring Security与Apache Shiro

Spring Security权限管理

SpringBoot集成Spring Security——自动登录

spring mvc集成spring security 案例

Spring Security自定义用户认证