zoukankan      html  css  js  c++  java
  • SpringSecurity权限管理框架--基于springBoot实现认证功能

    简介

    Spring Security 是一款强大可定制的用于认证和授权的框架,为Spring项目提供安全保护。

    在springBoot项目中添加springSecurity依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    1.创建可以被SpringSecurity识别的用户类

    @TableName("xxx")
    @Data
    public class BzAdmin implements UserDetails {
        private int id;
        private String username;
        private String password;
    
        @TableLogic(value = "0",delval = "1")
        private int status = 0;
    
    
        @Override
        public Collection<? extends GrantedAuthority> getAuthorities() {
            return null;
        }
    
        @Override
        public boolean isAccountNonExpired() {
            return true;
        }
    
        @Override
        public boolean isAccountNonLocked() {
            return true;
        }
    
        @Override
        public boolean isCredentialsNonExpired() {
            return true;
        }
    
        @Override
        public boolean isEnabled() {
            return true;
        }
    }

    2.修改数据库的数据  密码添加前缀noop代表不加密校验

    3.写业务类

    @Service
    public class BzAdminService extends ServiceImpl<BzAdminMapper,BzAdmin> implements UserDetailsService {
    
        @Override
        public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
    
            BzAdmin username = getOne(new QueryWrapper<BzAdmin>()
                    .eq("username", s));
    
          
            if (username==null){
                throw  new UsernameNotFoundException("用户不存在");
            }
            return username;
        }
    }

    4.修改 SpringSecurity 配置

    @EnableWebSecurity
    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Autowired
        private BzAdminService bzAdminService;
        @Override
        protected void configure(AuthenticationManagerBuilder auth)throws Exception{
            //声明使用bzAdminService
            auth.userDetailsService(bzAdminService);
    
        }
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            /**
             * authorizition 授权
             * 在shiro和SpringSecurity中 所有以Author开头的单词都和授权业务有关系
             *
             * authorizeRequests 配置拦截规则
             * antMatchers 配置路径
             * permitAll 不拦截
             */
            http.authorizeRequests()
    //                配置不拦截
                    .antMatchers("/admin/**","/img/**","/css/**","/js/**","/ztree/**","/login.jsp","/login","/layui/**")
                    .permitAll()
    //                拦截所有 配置一般不会使用/** 而是独立配置
    //                anyRequest 代表所有路径
                    .anyRequest()
                    .authenticated();
            /**
             * 自定义登录页面
             *
             * formLogin() 代表表单登录
             * loginPage 自定义登录页面
             * loginProcessingUrl 定义登录方法的地址 /login就是SpringSecurity中的认证方法
             * successForwardUrl 登录成功后的地址
             * failureForwardUrl 登录失败后的地址
             */
            http.formLogin()
                    .loginPage("/login.jsp")
                    .successForwardUrl("/main.jsp")
                    .failureForwardUrl("/login.jsp")
                    .loginProcessingUrl("/login")
                    .and()
                    .csrf()
                    .disable()
            ;
    
    //       html iframe标签引用二级页面 会被默认拦截
    //        可以配置不拦截
            http.headers().frameOptions().disable();
        }
    
    }
         

    5.Html

    <html>
        <head>
        
        </head>
        
        <body class="layui-layout-login">
        
    
            <form class="layui-form" action="/login" method="post">
                
          
                    <input name="username" id="username">
        
    
                    <input name="password" id="password" >
    
                <button type="submit" </button>
    
            </form>
    
        </body>
    
    
    </html>
  • 相关阅读:
    网络编程
    并发编程-线程池
    并发编程-集合
    并发编程-AQS
    并发编程-CAS
    并发编程-volatile和synchronized的区别
    并发编程-synchronized
    并发编程-java内存模型
    JVM-分代垃圾回收器
    性能优化
  • 原文地址:https://www.cnblogs.com/huahualove/p/13944910.html
Copyright © 2011-2022 走看看