zoukankan      html  css  js  c++  java
  • springsecurity

    package com.atguigu.security.config;
    
    import javax.sql.DataSource;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    import org.springframework.security.core.userdetails.UserDetailsService;
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl;
    
    @EnableGlobalMethodSecurity(prePostEnabled = true) //开启细粒度全局方法级别权限控制功能
    @Configuration //声明当前类是一个配置类。相当与XML配置文件作用。
    @EnableWebSecurity  //声明式配置,启用SpringSecurity安全机制。
    public class AppWebSecurityConfig extends WebSecurityConfigurerAdapter {
    
    	@Autowired
    	DataSource dataSource;
    	
    	@Autowired
    	UserDetailsService userDetailsService;//用户详情查询服务组件的接口
    
    	//@Autowired
    	//PasswordEncoder passwordEncoder;
    	
    	@Override
    	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    		//默认认证
    		//super.configure(auth);
    		
    		//实验四:自定义认证用户信息 - 基于内存认证方式		
    //		auth.inMemoryAuthentication()
    //			.withUser("zhangsan").password("123456").roles("学徒","大师")
    //			.and()
    //			.withUser("lisi").password("123123").authorities("罗汉拳","武当长拳");
    		
    		//采用数据库认证方式
    		//auth.userDetailsService(userDetailsService);  //默认密码校验,按照明文进行校验。
    		//auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder);
    		auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
    	}
    	
    	@Override
    	protected void configure(HttpSecurity http) throws Exception {
    		//super.configure(http); //默认权限规则。所有请求都受限制
    		
    		//实验一:授权首页和静态资源
    //		http.authorizeRequests()
    //				.antMatchers("/layui/**","/index.jsp").permitAll()
    //				.anyRequest().authenticated();
    			
    		
    		//实验6,授权访问
    		http.authorizeRequests()
    		.antMatchers("/layui/**","/index.jsp").permitAll()
    		//.antMatchers("/level1/**").hasRole("学徒")  //相当于调用hasAuthority("ROLE_学徒")
    		//.antMatchers("/level2/**").hasRole("大师")
    		//.antMatchers("/level3/**").hasRole("宗师")
    		//.antMatchers("/level3/**").hasAuthority("葵花宝典")
    		.anyRequest().authenticated();
    		
    		
    		//实验二:默认及自定义登录页
    		//http.formLogin();  //默认登录页。很丑
    		
    		//http.formLogin().loginPage("/index.jsp"); //自定义登录页
    		http.formLogin().loginPage("/index.jsp")
    					.loginProcessingUrl("/index.jsp")
    					.usernameParameter("loginacct")
    					.passwordParameter("userpswd")
    					.defaultSuccessUrl("/main.html");
    		
    		
    		//http.logout(); //默认注销请求   请求路径:"/logout"
    		http.logout().logoutUrl("/logout").logoutSuccessUrl("/index.jsp");
    		
    		//http.csrf().disable(); //禁用CSRF
    		
    		http.exceptionHandling().accessDeniedPage("/unauth.html");
    		
    		//开启记住我功能。
    		//http.rememberMe();  //基于Cookie的方式实现记住我功能
    		JdbcTokenRepositoryImpl ptr = new JdbcTokenRepositoryImpl();
    		ptr.setDataSource(dataSource);
    		http.rememberMe().tokenRepository(ptr);
    		
    	}
    
    	
    	//MD5+盐+随机数
    	//$2a$10$.gt2E3i5WHU6XrDQ/tbJ2uhLtutfCpNMX1I.CH8LSiKjgSc41o1hy
    	//$2a$10$6e8Tv0Z/kp.xDMJirgm1jepkllup0z7Fet8XVGMV/ZqXUfTCN2XR.
    	//$2a$10$sJrXoUlOp3es.IAFH6YPGuQVwD74iot79T4rc8AhkW7THJFEPr226
    	public static void main(String[] args) {
    		BCryptPasswordEncoder bcpe = new BCryptPasswordEncoder();
    		String encode = bcpe.encode("123456");
    		System.out.println(encode);
    	}
    	
    
    }
    
    
  • 相关阅读:
    jdk9 特性
    jdk8 特性
    Eclipse中Spring插件的安装
    C++避免程序运行完后窗口一闪而过的方法
    完全二叉树节点个数
    Shell 编写倒着的*三角形
    Drools源于规则引擎
    Spring Data MongoDB 三:基本文档查询(Query、BasicQuery
    docker环境搭建
    MyBatis根据数组、集合查询
  • 原文地址:https://www.cnblogs.com/tdcql/p/12784197.html
Copyright © 2011-2022 走看看