springboot整合springsecurity快速入门案例
之前都是ssm,最近尝试重构,使用springboot要整合springsecurity需要以下步骤
maven依赖
只需要再springboot基础上添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
自己写一个service
UserDetailsService 是springsecurity提供的接口,此类就一个方法,主要为了获取用户信息的,相当于用用户名去查数据库,查到的用户信息返给spring,框架给你判断用户密码权限之类的东西,.不用你自己判断.
@Service
public class UserDetailsImpl implements UserDetailsService {
@Autowired
private UserServiceImpl userService;
@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
Collection<GrantedAuthority> authorities = new ArrayList<>();
// 从数据库中取出用户信息
UserInfo userInfo = new UserInfo();
userInfo.setId(s);
UserInfo user = userService.getUserInfo(userInfo);
// 判断用户是否存在
if(user == null) {
throw new UsernameNotFoundException("用户名不存在");
}
// 添加权限
authorities.add(new SimpleGrantedAuthority(user.getPositionId()));
// 返回UserDetails实现类
return new User(user.getId(), user.getPassword(), authorities);
}
}
还需要一个配置类
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsImpl userDetailsService;
@Autowired
private SuccessLoginHandle successLoginHandle;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new PasswordEncoder() {
@Override
public String encode(CharSequence charSequence) {
return charSequence.toString();
}
@Override
public boolean matches(CharSequence charSequence, String s) {
return s.equals(charSequence.toString());
}
});
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
// 如果有允许匿名的url,填在下面
// .antMatchers().permitAll()
.anyRequest().authenticated()
.and()
// 设置登陆页
.formLogin().loginPage("/jsp-pages/login")
//自定义登录路径
.loginProcessingUrl("/login") // 自定义登录路径
// 设置登陆成功页
//.defaultSuccessUrl("/")
.permitAll()
.successHandler(successLoginHandle)
// 自定义登陆用户名和密码参数,默认为username和password
.usernameParameter("id")
// .passwordParameter("password")
.and()
.logout().logoutUrl("loginOut"); //自定义退出登录页面;
// 关闭CSRF跨域
http.csrf().disable();
}
@Override
public void configure(WebSecurity web) throws Exception {
// 设置拦截忽略文件夹,可以对静态资源放行
web.ignoring().antMatchers("/css/**", "/js/**","/login/getCode*","/login/askCode*","/img/**","/html/**","/fonts/**");
}
}
这样就完成了整合,注意点有要放行静态资源,验证码查询,以及登录页面,不然都拦截完了,用户也没地方登录了. 你这个还是前后不分离的啊,现在基本都分离了 我是小白,暂时还看不太懂,谢谢楼主分享。 fht000 发表于 2020-11-24 16:01
你这个还是前后不分离的啊,现在基本都分离了
公司很小,项目很小,开发一人,没必要分离, 谢谢楼主,学习一下。
页:
[1]