之前有过使用spring security得经历,那是在一年前了,在一家公司他们已经封装好了接口和配置,当时会拿来使用。顺之就给自己得毕业设计也搞了spring security,但是遇到很多问题,因为它被经过修改,已经跟官网上得不一样了,或者说,他已经变成了一个变态(多态)。好了,话不多说,这次呢 ,我开发使用得是springboot框架,大家也知道,少了很多配置,所以也就没有了跟web开发得时候一样得步骤了。经过二天得攻坚,我总算实现了权限控制。
1.首先:需要在pom文件里引入spring security相关jar;
2.配置一个spring security得配置文件,但是文件已经变成了java后缀(当然此处我百度理解过来都是如此),代码如下:
@Configuration
@EnableWebSecurity
public class SecurityConfig{
@Configuration
public static class WebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter{
@Autowired
CustomUserService customUserService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(customUserService); //配置自定义userDetailService
}
@Override
protected void configure(HttpSecurity http) throws Exception{
http.csrf().disable();
http.authorizeRequests().antMatchers("/").permitAll(); //允许访问首页
http.formLogin().loginPage("/login")
//设置默认登录成功跳转页面
.loginProcessingUrl("/getLogin")
.defaultSuccessUrl("/crud").failureUrl("/loginError").permitAll()
;
}
}
}
3.一个自定义,用来判断是否用户存在于数据库,如果存在,还获取对应得权限:
@Service
public class CustomUserService implements UserDetailsService {
@Autowired
UserMapper userMapper;
List<Map<String,Object>> list = new ArrayList<>();
@Override
public UserDetails loadUserByUsername(String username){
Map<String,Object> map = new HashMap<>();
map.put("username",username);
list = userMapper.findUserName(map);
if(list.size()==0){
return null;
}else{
//用于添加用户权限
String role = list.get(0).get("name").toString();
String password = list.get(0).get("user_password").toString();
Collection<? extends GrantedAuthority> authorities = AuthorityUtils.commaSeparatedStringToAuthorityList(role);
return new User(list.get(0).get("user_account").toString(),password, authorities);
}
}
}
4.最后登录得时候就会进行判断和控制:
输入错误得用户或者不存在得:
正确跳转: