博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springSecurity使用
阅读量:458 次
发布时间:2019-03-06

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

目录

官网https://spring.io/guides/gs/securing-web/

无情的翻译官。。。。。。

1.1 依赖包导入

4.0.0
org.springframework.boot
spring-boot-starter-parent
2.2.2.RELEASE
com.example
securing-web
0.0.1-SNAPSHOT
securing-web
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-security
org.springframework.security
spring-security-test
test
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.springframework.boot
spring-boot-maven-plugin

里面引入了测试要用到的web模块,thymeleaf引擎模块,以及咱们的security模块

2.1 没有安全机制下的一个web

测试的项目有两个页面home.html和hello.html

src/main/resources/templates/home.html:

            Spring Security Example                

Welcome!

Click here to see a greeting.

home页面提交到一个/hello请求,会返回一个hello.html:

src/main/resources/templates/hello.html:

            Hello World!                

Hello world!

这个web项目依赖于springmvc,我们可以自定义一下视图解析器:

src/main/java/com/example/securingweb/MvcConfig.java:

package com.example.securingweb;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class MvcConfig implements WebMvcConfigurer {	public void addViewControllers(ViewControllerRegistry registry) {		registry.addViewController("/home").setViewName("home");		registry.addViewController("/").setViewName("home");		registry.addViewController("/hello").setViewName("hello");		registry.addViewController("/login").setViewName("login");	}}

这种无安全机制的web任何人都可以通过localhost:8080/hello 直接访问到hello.html.

假设我们要防止那些没有经过授权的用户进入到hello.html页面,就需要用到我们的security模块。

3.1 做一个安全机制的web

在引入了我们的security包的情况下,我们需要自定义下我们的安全规则;

src/main/java/com/example/securingweb/WebSecurityConfig.java:

package com.example.securingweb;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;import org.springframework.security.core.userdetails.User;import org.springframework.security.core.userdetails.UserDetails;import org.springframework.security.core.userdetails.UserDetailsService;import org.springframework.security.provisioning.InMemoryUserDetailsManager;@Configuration@EnableWebSecuritypublic 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();	}	@Bean	@Override	public UserDetailsService userDetailsService() {		UserDetails user =			 User.withDefaultPasswordEncoder()				.username("user")				.password("password")				.roles("USER")				.build();		return new InMemoryUserDetailsManager(user);	}}
  • @EnableWebSecurity:用于开启springSecurity模块功能和提供与springmvc集成的功能
  • WebSecurityConfigurerAdapter:自定义的配置都要继承这个类
  • configure(HttpSecurity):定义了哪些http请求需要被安全加密,哪些可以被放行通过。这里"/","home"这两个路径不需要任何授权请求,也就是说任何人都可以访问。这里注意链式写法用.and()衔接。
  • formLogin()和logout()这两个一般都是单独定制,对于formLogin()我们把它转向到我们自己写的login页面,否则SpringSecurity在拦截到一个非法请求的时候会返回你一个自带的login页面。当然对于这两个页面我们都是对放行的。
  • userDetailsService() :定义了一个内存对象,这里注意withDefaultPasswordEncoder(),高版本的SpringSecurity已经不允许明码形式的密码,必须对密码进行加密再传送。

src/main/resources/templates/login.html:

            Spring Security Example                 
Invalid username and password.
You have been logged out.

src/main/resources/templates/hello.html:

            Hello World!                

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

转载地址:http://facbz.baihongyu.com/

你可能感兴趣的文章