Spring Security使用
Spring中首先我们先创建`WebSecurityConfig` 继承`WebSecurityConfigurerAdapter`类
/*** <p>该类下有重载了三个configure()的方法</p>* <p>我们使用其中任意一个就可以完成所有功能的配置</p>* <p>但是在有些时候我们为了方便管理可以分别重写这三个方法</p>*/@EnableWebSecuritypublic class SecurityConfiguration extends WebSecurityConfigurerAdapter {@Qualifier("userService")@Autowiredprivate UserDetailsService userDetailsService;//我们可以通过向我们的http.authorizeRequests()方法添加多个子节点来指定我们的URL的自定义要求//这个方法是我们比较常用的,方法比较易懂且可方便的书写@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/setcolor").permitAll()// 指定所有用户进行访问指定的url.anyRequest().authenticated()//方法中的自定义匹配.and() //login设置 自定义登录页面且允许所有用户登录.formLogin().permitAll()// 允许所有用户访问登录页面.and() //and()方法就是跳出其他级的配置回到http这里.logout() //logouts 设置.invalidateHttpSession(true)// httpSession是否有效时间,如果使用了 SecurityContextLogoutHandler,其将被覆盖.deleteCookies();//指定注销成功后remove cookies}@Overridepublic void configure(WebSecurity web) throws Exception {web.ignoring().mvcMatchers("/static/**");}//为多个用户配置内存身份验证@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().passwordEncoder(NoOpPasswordEncoder.getInstance()).withUser("admin").password("123").roles("ADMIN");auth.inMemoryAuthentication().passwordEncoder(NoOpPasswordEncoder.getInstance()).withUser("user").password("123").roles("USER");auth.inMemoryAuthentication().passwordEncoder(NoOpPasswordEncoder.getInstance()).withUser("player").password("123").roles("PLAYER");}}}
接下来我们需要创建 `WebSecurityIntializer` 类 继承 `AbstractSecurityWebApplicationInitializer` 类
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;public class WebSecurityIntializer extends AbstractSecurityWebApplicationInitializer {}
将应用程序中的每个URL注册`springSecurityFilterChain`过滤器。 之后,我们将确保WebSecurityConfig加载在我们现有的`ApplicationInitializer`中。它将被添加到`getRootConfigClasses()`
public class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[] { WebSecurityConfig.class};}// ... other overrides ...}
配置用户权限管理
@Servicepublic class UserService implements UserDetailsService {@Overridepublic UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {//在正常项目中,我们这里是要从数据库获得这个UserUser user = new User();//通过这个build()我们还可以很多属性赋值,以适应项目中需求//我下面的是三个必须要给出的return org.springframework.security.core.userdetails.User.builder().username(user.getName()).password(user.getPassword()).roles("USER").build();}}
在我们自己写的Service里面重写 `UserDetailsService`类
实现其中的`loadUserByUsername()`方法,也就是根据名字获取用户的方法
这个类也就是刚才在那个配置类里注入的
@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {//这里也就是把那个Service交给Security了,后面的权限判断也就不需要我们管很多了auth.userDetailsService(userDetailsService);}
使用`WebSecurityConfigurerAdapter`时,会自动应用注销功能。 默认情况下,访问URL` /logout`
文章转载自产教Code,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




