博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring学习日志之Spring Security配置
阅读量:7076 次
发布时间:2019-06-28

本文共 3743 字,大约阅读时间需要 12 分钟。

依赖引入

org.springframework.security
spring-security-core
org.springframework.security
spring-security-config
org.springframework.security
spring-security-web

启用Spring Security

  • 首先创建一个继承AbstractSecurityWebApplicationInitializer的类。这个操作会导致一个名为DelegatingFilterProxyFilter被注册,它会拦截发往应用中的请求,并将请求委托给ID为SpringSecurityFilterChain的bean
public class SecurityWebInitializer extends AbstractSecurityWebApplicationInitializer{}
  • 再创建一个配置类
@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter{}

至此Spring Security就被启用了,目前所有的请求都会被拦截

配置

WebSecurityConfigurerAdapter中有三个名为configure的方法提供重载,三个方法的描述如下:

方法 描述
configure(HttpSecurity) 配置拦截模式
configure(AuthenticationManagerBuilder) 配置用户信息
configure(WebSecurity) 配置Spring Security的Filter链

配置用户信息

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter{    @Override    protected void configure(AuthenticationManagerBuilder auth) throws Exception    {        auth.inMemoryAuthentication()   // 基于内存的用户存储            .withUser("admin")            .password("password")            .roles("USER", "ADMIN");    }

配置拦截路径

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter{    @Override    protected void configure(HttpSecurity http) throws Exception    {        http.authorizeRequests()                .antMatchers("/info").authenticated()                .antMatchers(HttpMethod.GET, "/health").hasAnyAuthority("ADMIN")                .anyRequest().permitAll();    }}

启用HTTPS

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter{    @Override    protected void configure(HttpSecurity http) throws Exception    {        http.authorizeRequests()                .anyRequest().permitAll()                .and()                .requiresChannel()                .antMatchers("/bankInfo").requiresSecure()  // enable HTTPS                .antMatchers("/").requiresInsecure();       // disable HTTPS    }}

禁用CSRF

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter{    @Override    protected void configure(HttpSecurity http) throws Exception    {        http.authorizeRequests()                .anyRequest().permitAll()                .and()                .csrf().disable();    }}

登录与注销

  • 在重写configure(HttpSecurity)之前会有一个默认的登录页面,需要登录时会自动跳转到这个位于/login下的页面,但一旦重写此方法后就会失去这个简单的登录页面。

启用默认登录页

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter{    @Override    protected void configure(HttpSecurity http) throws Exception    {        http.authorizeRequests()                .anyRequest().permitAll()                .and()                .formLogin();    }}

自定义登录页面

如果不想做多余的配置,那么自定义的页面里:

  • formaction应该提交到/login
  • 包含username的输入域且name属性为username
  • 包含password的输入域且name属性为password

指定URL

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter{    @Override    protected void configure(HttpSecurity http) throws Exception    {        http.authorizeRequests()                .anyRequest().permitAll()                .and()                .formLogin().loginPage("/login");    }}

指定自定义页面

@Configuration@EnableWebMvc@ComponentScanpublic class WebConfig extends WebMvcConfigurerAdapter {   @Override   public void addViewControllers(ViewControllerRegistry registry) {      registry.addViewController("/login").setViewName("login");   }}

ViewControllerRegistry可以用来直接转发请求到一个视图而无需编写控制器类。

注销

  • 如果没有启用CSRF,直接访问\logout就可实现登出
  • 如果启用CSRF,用POST方法访问\logout并带上CSRF Token

转载于:https://www.cnblogs.com/xz816111/p/8331770.html

你可能感兴趣的文章
python packages prebuild for windows
查看>>
关于ActionContext.getContext()的使用方法心得
查看>>
每日一句(2014-10-23)
查看>>
这样就算会了PHP么?-10
查看>>
远程调用WMI安装软件
查看>>
从零开始学习jQuery (七) jQuery动画-让页面动起来!
查看>>
asp.net 操作word
查看>>
SQL Server 权限管理
查看>>
郎意难坚,侬情自热(文/王路)
查看>>
Form_Form Builder开发基于视图页面和自动代码生成包(案例)
查看>>
Util应用程序框架公共操作类(二):数据类型转换公共操作类(源码篇)
查看>>
localhost与127.0.0.1及本机ip的区别
查看>>
Android SDK Manager 中如果没有相应的镜像ARM XX Image
查看>>
简单聊下Unicode和UTF-8
查看>>
ASP.NET Web API的Controller是如何被创建的?
查看>>
在 Azure 上使用 Docker运行 Mono
查看>>
(转)JITComplier、NGen.exe及.NET Native
查看>>
Ant build xml中的各种变量解释
查看>>
labview视频采集IMAdx
查看>>
Android:实现一种浮动选择菜单的效果
查看>>