ITPub博客

Spring Security(二)--Guides

原创 IT综合 作者:Kirito的博客 时间:2018-10-09 15:22:02 0 删除 编辑

上一篇文章《Spring Security(一)--Architecture Overview》,我们介绍了Spring Security的基础架构,这一节我们通过Spring官方给出的一个guides例子,来了解Spring Security是如何保护我们的应用的,之后会对进行一个解读。

2 Spring Security Guides

  • 2.1 引入依赖

  • 2.2 创建一个不受安全限制的web应用

  • 2.3 配置Spring Security

  • 2.4 添加启动类

  • 2.5 测试

  • 2.6 总结

2 Spring Security Guides

2.1 引入依赖

            org.springframework.boot        spring-boot-starter-web                org.springframework.boot        spring-boot-starter-security                org.springframework.boot        spring-boot-starter-thymeleaf

由于我们集成了springboot,所以不需要显示的引入Spring Security文档中描述core,config依赖,只需要引入spring-boot-starter-security即可。

2.2 创建一个不受安全限制的web应用

这是一个首页,不受安全限制

src/main/resources/templates/home.html

            Spring Security Example                Welcome!        Click here to see a greeting.

这个简单的页面上包含了一个链接,跳转到"/hello"。对应如下的页面

src/main/resources/templates/hello.html

            Hello World!                Hello world!

接下来配置Spring MVC,使得我们能够访问到页面。

@Configurationpublic class MvcConfig extends WebMvcConfigurerAdapter {    @Override    public void addViewControllers(ViewControllerRegistry registry) {        registry.addViewController("/home").setViewName("home");        registry.addViewController("/").setViewName("home");        registry.addViewController("/hello").setViewName("hello");        registry.addViewController("/login").setViewName("login");    }}

2.3 配置Spring Security

一个典型的安全配置如下所示:

@Configuration@EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter {     @Override    protected void configure(HttpSecurity http) throws Exception {        http             .authorizeRequests()                .antMatchers("/", "/home").permitAll()                .anyRequest().authenticated()                .and()            .formLogin()                .loginPage("/login")                .permitAll()                .and()            .logout()                .permitAll();    }    @Autowired    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {        auth             .inMemoryAuthentication()                .withUser("admin").password("admin").roles("USER");    }}




我们目前还没有登录页面,下面创建登录页面:

            Spring Security Example                             Invalid username and password.                            You have been logged out.                             User Name :               Password:

这个Thymeleaf模板提供了一个用于提交用户名和密码的表单,其中name="username",name="password"是默认的表单值,并发送到“/ login”。 在默认配置中,Spring Security提供了一个拦截该请求并验证用户的过滤器。 如果验证失败,该页面将重定向到“/ login?error”,并显示相应的错误消息。 当用户选择注销,请求会被发送到“/ login?logout”。

最后,我们为hello.html添加一些内容,用于展示用户信息。

            Hello World!                Hello [[${#httpServletRequest.remoteUser}]]!

我们使用Spring Security之后,HttpServletRequest#getRemoteUser()可以用来获取用户名。 登出请求将被发送到“/ logout”。 成功注销后,会将用户重定向到“/ login?logout”。

2.4 添加启动类

@SpringBootApplicationpublic class Application {    public static void main(String[] args) throws Throwable {        SpringApplication.run(Application.class, args);    }}

2.5 测试

访问首页 http://localhost:8080/:

点击here,尝试访问受限的页面: /hello,由于未登录,结果被强制跳转到登录页 /login

输入正确的用户名和密码之后,跳转到之前想要访问的 /hello:

点击Sign out退出按钮,访问: /logout,回到登录页面:

2.6 总结

本篇文章没有什么干货,基本算是翻译了Spring Security Guides的内容,稍微了解Spring Security的朋友都不会对这个翻译感到陌生。考虑到受众的问题,一个入门的例子是必须得有的,方便后续对Spring Security的自定义配置进行讲解。下一节,以此guides为例,讲解这些最简化的配置背后,Spring Security都帮我们做了什么工作。

本节所有的代码,可以直接在Spring的官方仓库下载得到, git clone https://github.com/spring-guides/gs-securing-web.git。不过,建议初学者根据文章先一步步配置,出了问题,再与demo进行对比。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31556476/viewspace-2215732/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-09-27

  • 博文量
    4
  • 访问量
    1564