Spring Security简单实现
1、创建一个自定义类继承ConfigurerAdapter,
2、在该类中使用@EnableWebSecurity,
3、在其中重写config方法来配置所需要的安全配置
代码示例:
创建一个自定义类:MySecurity
package com.example.gameboxadminserver.contsfig;
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.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.crypto.bcrypt.BCryptPasswordEncoder;
@Configuration
@EnableWebSecurity
public class MySecurity extends WebSecurityConfigurerAdapter {
@Autowired
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("hyx1").password(new BCryptPasswordEncoder().encode("123456")).roles("USER");
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("hyx").password(new BCryptPasswordEncoder().encode("123456")).roles("ADMIN");
//System.out.println("加密后"+new BCryptPasswordEncoder().encode("123456"));
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/admin/adminLogin").permitAll()
.antMatchers("/user/getAllUser").permitAll()
.antMatchers("/suggest/getAllSuggest").permitAll()
.anyRequest().permitAll();
/*.authenticated()
.and()
.formLogin()
.loginPage("/admin/adminLogin")
.usernameParameter("adminName").passwordParameter(new BCryptPasswordEncoder().encode("adminPwd"))
.defaultSuccessUrl("/user/getAllUser")
.failureUrl("/suggest/getAllSuggest");*/
}
}
其中有两个configure方法
configure(AuthenticationManagerBuilder auth)
configure(HttpSecurity http)
其中
configure(AuthenticationManagerBuilder auth)//用于用户认证,添加用户给定权限
auth.inMemoryAuthentication().withUser(“aaaa”).password(“123456”).roles(“USER”);//添加用户aaaa,给予用户权限
anth.inMemoryAuthentication().withUser(“admin”).password(“admin”).roles(“ADMIN”,“DBA”);//添加用户admin,给予管理员、DBA权限
configure(HttpSercurity http)//用于用户授权
//其下的authorizeRequests()方法有很多子节点
//macher声明顺序
//antMatchers用Ant匹配路径
//regexMatchers正则表达式匹配路径
anyRequest //匹配所有路劲
.access(String)//Spring EL表达式结果为true
.anonymous()//匿名可以访问
.denyAll()用户不能访问
.fullyAuthenticated()//用户完全认证可以访问(非remember-me下自动登录)
.hasAnyAuthority(String…)//如果有参数,参数表实权限,则其中任何一个权限可以访问
.hasAnyRole(String…)//如果有参数,参数表示角色,则其中任何一个角色可以访问
.hasAuthority(String…)//如果有参数,参数表实权限,则其权限可以访问
.hasIpAddress(String)//如果有参数,参数表实IP地址,如果用户IP和参数匹配,则可以访问
.hasRole(String)//如果有参数,参数表示角色,则其角色可以访问
.permitAll()//用户可以任意访问
.rememberMe()//允许通过remember-me登录的用户访问
.authenticated()//用户登录后可访问
授权示例
@OVerride
protected void configure(HttpSecurity http) throws Exception{
http.authorizeRequests()
.antMatchers("user/userLogin").permitAll()
.antMatchers("home").permitAll()
.antMatchers("admin/adminLogin").hasRole("Admin")
.anyRequest().authenticated();
//设置登录页面
.and()
.formLogin()
.loginPage("/login")
.usernameParameter("userName").passwordParameter("password")
//失败跳转页面
.failureUrl("login?error")
.and()
//注销操作
.loginout().permitAll()
.and()
//指定异常处理页面
.exceptionHandling().accessDeniedPage("/accessDenied");
}