好友
阅读权限10
听众
最后登录1970-1-1
|
一蓑烟雨
发表于 2020-11-24 15:56
之前都是ssm,最近尝试重构,使用springboot
要整合springsecurity需要以下步骤
maven依赖
只需要再springboot基础上添加
[XML] 纯文本查看 复制代码 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
自己写一个service
UserDetailsService 是springsecurity提供的接口,此类就一个方法,主要为了获取用户信息的,相当于用用户名去查数据库,查到的用户信息返给spring,框架给你判断用户密码权限之类的东西,.不用你自己判断.
[Java] 纯文本查看 复制代码 @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);
}
}
还需要一个配置类
[Java] 纯文本查看 复制代码 @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/**");
}
}
这样就完成了整合,注意点有 要放行静态资源,验证码查询,以及登录页面,不然都拦截完了,用户也没地方登录了. |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|