温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Springboot2.3集成Spring security框架的案例

发布时间:2020-08-13 11:40:55 来源:亿速云 阅读:403 作者:小新 栏目:开发技术

这篇文章主要介绍Springboot2.3集成Spring security框架的案例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

0、pom

<&#63;xml version="1.0" encoding="UTF-8"&#63;> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">	<modelVersion>4.0.0</modelVersion>	<parent>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-starter-parent</artifactId>	<version>2.3.0.RELEASE</version>	<relativePath/> <!-- lookup parent from repository -->	</parent>	<groupId>com.jack</groupId>	<artifactId>demo</artifactId>	<version>0.0.1-SNAPSHOT</version>	<packaging>war</packaging>	<name>demo</name>	<description>Demo project for Spring Security</description>	<properties>	<java.version>1.8</java.version>	</properties>	<dependencies>	<dependency>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-starter-security</artifactId>	</dependency>	<dependency>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-starter-web</artifactId>	</dependency>	<dependency>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-starter-tomcat</artifactId>	<scope>provided</scope>	</dependency>	<dependency>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-starter-test</artifactId>	<scope>test</scope>	<exclusions>	<exclusion>	<groupId>org.junit.vintage</groupId>	<artifactId>junit-vintage-engine</artifactId>	</exclusion>	</exclusions>	</dependency>	<dependency>	<groupId>org.springframework.security</groupId>	<artifactId>spring-security-test</artifactId>	<scope>test</scope>	</dependency>	</dependencies>	<build>	<plugins>	<plugin>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-maven-plugin</artifactId>	</plugin>	</plugins>	</build> </project>

1、SpringSecurityConfig(security配置)

// 手动定义用户认证 和 // 关联用户Service认证 二者取一

这里测试用的是 手动定义用户认证!!!

package com.jack.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** * @program: demo * @description: Security 配置 * @author: Jack.Fang * @date:2020-06-01 1541 **/ @Configuration @EnableWebSecurity public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private MyUserService myUserService; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // 手动定义用户认证 auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("admin").password(new BCryptPasswordEncoder().encode("123456")).roles("ADMIN"); auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("jack").password(new BCryptPasswordEncoder().encode("fang")).roles("USER"); // 关联用户Service认证 //auth.userDetailsService(myUserService).passwordEncoder(new MyPasswordEncoder()); // 默认jdbc认证 // auth.jdbcAuthentication().usersByUsernameQuery("").authoritiesByUsernameQuery("").passwordEncoder(new MyPasswordEncoder()); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/").permitAll() .anyRequest().authenticated() .and() .logout().permitAll() .and() .formLogin(); http.csrf().disable(); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/js/**","/css/**","/image/**"); } }

2、MyPasswordEncoder(自定义密码比较)

package com.jack.demo; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; /** * @program: demo * @description: 密码加密 * @author: Jack.Fang * @date:2020-06-01 1619 **/ public class MyPasswordEncoder implements PasswordEncoder { @Override public String encode(CharSequence charSequence) { return new BCryptPasswordEncoder().encode(charSequence.toString()); } @Override public boolean matches(CharSequence charSequence, String s) { return new BCryptPasswordEncoder().matches(charSequence,s); } }

3、MyUserService(自行实现的用户登录接口)

具体内容 省略。这里测试用的是SpringSecurityConfig手动添加用户名与密码。

package com.jack.demo; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Component; /** * @program: demo * @description: 用户 * @author: Jack.Fang * @date:2020-06-01 1617 **/ @Component public class MyUserService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException { return null; } }

4、启动类(测试)

DemoApplication.java

package com.jack.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.security.access.prepost.PostAuthorize; import org.springframework.security.access.prepost.PostFilter; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreFilter; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.core.userdetails.User; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @EnableGlobalMethodSecurity(prePostEnabled = true) @RestController @SpringBootApplication public class DemoApplication {	public static void main(String[] args) {	SpringApplication.run(DemoApplication.class, args);	}	@RequestMapping("/")	public String index(){	return "hello Spring Security!";	}	@RequestMapping("/hello")	public String hello(){	return "hello !";	}	@PreAuthorize("hasRole('ROLE_ADMIN')")	@RequestMapping("/roleAdmin")	public String role() {	return "admin auth";	}	@PreAuthorize("#id<10 and principal.username.equals(#username) and #user.username.equals('abc')")	@PostAuthorize("returnObject%2==0")	@RequestMapping("/test")	public Integer test(Integer id, String username, User user) {	// ...	return id;	}	@PreFilter("filterObject%2==0")	@PostFilter("filterObject%4==0")	@RequestMapping("/test2")	public List<Integer> test2(List<Integer> idList) {	// ...	return idList;	} }

测试hello接口(http://localhost:8080/hello)

未登录跳转登录页

Springboot2.3集成Spring security框架的案例

登录SpringSecurityConfig配置的admin账号与密码123456
成功调用hello

Springboot2.3集成Spring security框架的案例

测试roleAdmin(登录admin 123456成功,登录jack fang访问则失败)

Springboot2.3集成Spring security框架的案例

Springboot2.3集成Spring security框架的案例

登出 logout

Springboot2.3集成Spring security框架的案例

以上是Springboot2.3集成Spring security框架的案例的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI