参考http://blog.csdn.net/suhale/article/details/44969221的文档,通过自己的代码来实现了Spring Boot + Spring Security的Restful格式返回参数。
采用了Maven的方式获取最新版本的Spring Boot,配置如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.1.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies>
配置完成后,我们首先定义三层结构及dao,service,controller,数据库使用的是mysql,dao框架是mybatis,在这里我们主要看UserServiceImpl的定义,因为UserServiceImpl实现了springframerk.security框架的UserDetailsService,所以我们这里重写了loadUserByUsername的方法,这里重写的目的是为了按照自己的数据库获取用户信息,代码如下:
@Override public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException { UserInfo userInfo = getUserByName(userName); if (userInfo == null) { throw new UsernameNotFoundException(userName); } //根据用户获取用户角色 List<Role> roles = roleService.getUserRole(userInfo.getUserId()); //定义权限集合 List<SimpleGrantedAuthority> grantedAuthorities = new ArrayList<SimpleGrantedAuthority>(); //添加权限到集合中 for (Role role : roles){ grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_"+role.getRoleType())); } boolean booleanStatus = true; if(userInfo.getStatus() == 0){ booleanStatus = false; } //加密密码 BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(16); User user = new User(userInfo.getUserName(),bCryptPasswordEncoder.encode(userInfo.getPassword()),booleanStatus,true,true, true, grantedAuthorities); return user; }
这里的加密密码是因为我的数据库的密码字段是手工随便输入的可读密码。
接着我们定义一个WebSecurityConfig类继承WebSecurityConfigurerAdapter类,用于实现访问权限的配置,部分代码如下:
@Override protected void configure(HttpSecurity http) throws Exception { http //禁用CSRF保护 .csrf().disable() .authorizeRequests() //任何访问都必须授权 .anyRequest().fullyAuthenticated() //配置那些路径可以不用权限访问 .mvcMatchers("/login").permitAll() .and() .formLogin() //登陆成功后的处理,因为是API的形式所以不用跳转页面 .successHandler(new RestAuthenticationSuccessHandler()) //登陆失败后的处理 .failureHandler(new SimpleUrlAuthenticationFailureHandler()) .and() //登出后的处理 .logout().logoutSuccessHandler(new RestLogoutSuccessHandler()) .and() //认证不通过后的处理 .exceptionHandling() .authenticationEntryPoint(new RestAuthenticationEntryPoint()) ; }
最后我们可以通过定义controller的方式进行方法的访问,部分代码如下:
@RequestMapping(value = "/getUserInfo",method = RequestMethod.GET) @PreAuthorize("hasRole('USER')") public UserInfo getUserInfo(UserInfo user){ UserInfo userInfo = new UserInfo(); userInfo.setUserName("LIQIN"); userInfo.setPassword("123"); return userInfo; } @RequestMapping(value = "/getAuth",method = RequestMethod.GET) @PreAuthorize("hasRole('ADMIN')") public UserInfo getAuth(UserInfo user){ UserInfo userInfo = new UserInfo(); //userInfo.setUserName("LIQIN"); userInfo.setPassword("123"); return userInfo; }
我使用的开发工具是Idea,代码启动后使用自带的restful工具测试如下:
没有登陆的时候:
使用/login登陆的时候只输入用户名,没有输入密码:
将会出现如下错误:
登陆成功后,就可以进行方法的访问了:
最后我的代码及数据库的设置在附件里,或者访问我的git可以下载:
https://github.com/422518490/Spring-Security-
更多关于Spring Security的介绍请参考官方文档http://docs.spring.io/spring-security/site/docs/4.2.0.BUILD-SNAPSHOT/reference/htmlsingle/#crypto
相关推荐
这个平台利用了Spring Boot后端框架和Vue.js前端框架的优势,实现了高效、响应式的用户体验和稳定的服务端处理能力。 ### Spring Boot Spring Boot是Spring框架的一个扩展,简化了Java应用的初始搭建以及开发过程。...
后端部分,Spring Boot作为服务端框架,提供RESTful API接口供前端调用。Spring Data JPA简化了数据库操作,通过ORM(对象关系映射)将Java实体类与数据库表关联,使得开发者可以使用面向对象的方式来操作数据库。...
这个系统旨在为校园内的用户提供一个便捷、安全的线上拍卖平台,通过集成VUE.js进行前端交互设计,后端则利用Spring Boot框架进行服务端开发,结合Mysql数据库存储和管理数据。 Spring Boot作为Java领域的轻量级...
Spring Boot是Spring框架的一个扩展,它简化了创建独立的、生产级别的基于Spring的应用程序的过程。通过自动配置和起步依赖,Spring Boot可以使开发者快速启动和运行项目。 2. **Vue.js**: Vue.js是一个轻量级的...
通过内置的默认配置,Spring Boot允许开发者快速搭建应用,并减少了常规的配置工作。 描述中的“springboot”进一步强调了项目的技术栈。Spring Boot的核心特点包括起步依赖(Starter Dependencies)、嵌入式Web...
Spring Boot Security是一个强大的工具,用于在Spring Boot应用中轻松实现安全控制。它简化了安全配置,使得开发者可以快速地为应用程序添加认证和授权功能。在本文中,我们将深入探讨Spring Boot 2.0与Security的...
通过内置的Tomcat服务器和自动配置特性,Spring Boot可以使开发者快速构建可运行的应用程序。 2. **PayPal API** PayPal是全球领先的在线支付平台,提供了丰富的API接口供开发者集成到各种应用中。这些API包括但不...
1. **配置**:通过`@EnableWebMvc`或在Spring Boot中使用`spring-boot-starter-web`启动器启用Web MVC支持。 2. **URL映射**:使用`@RequestMapping`和其子注解来定义URL路径和HTTP方法映射。 3. **HTTP消息转换器**...
在本系统中,Spring Boot作为基础框架,提供了自动配置、内嵌式Web服务器(如Tomcat)、健康检查、Actuator等特性,使得系统能快速运行并提供RESTful服务。 2. **Spring Security** Spring Security是Spring生态...
Tamboot 是一个专为 Java 服务端开发设计的框架,它基于业界广泛采用的 Spring Boot 技术,旨在简化和加速开发过程,提供了一系列预配置和封装的基础模块。Spring Boot 以其开箱即用、简化配置的特点深受开发者喜爱...
在本文中,我们将深入探讨如何使用Spring Boot和Spring Security实现基于基本身份验证(Basic Authentication)的安全RESTful API。Spring Boot简化了创建独立、生产级别的基于Spring的应用程序,并且Spring ...
1. **Spring Boot框架**:快速构建Web应用,内置Tomcat服务器,简化配置。 2. **RESTful API设计**:通过HTTP协议,提供JSON格式的数据接口,便于前后端分离。 3. **JPA(Java Persistence API)**或**MyBatis**:...
- **Spring Web**:适用于构建RESTful API的服务端应用; - **Spring Data JPA**:用于实现基于JPA的数据持久化操作; - **Thymeleaf**:一个现代服务器端的Java模板引擎,用于渲染HTML视图模板; - **Spring ...
在IT行业中,Spring Boot是一个非常流行的Java框架,用于简化Spring应用程序的初始设置和...这个过程中涉及的知识点涵盖了Spring Boot的启动配置、依赖管理、Web服务的创建与暴露、以及应用的测试与部署等多个方面。
**Spring Boot RESTful 教程** 在现代Web开发中,RESTful API已经成为构建可扩展、模块化和松耦合系统的重要部分。Spring Boot,作为Java生态中的明星框架,以其简化配置和快速启动的优势,深受开发者喜爱。结合...
Spring Boot是Java领域的一个热门框架,它简化了Spring应用的初始搭建以及开发过程,通过预配置的starter pom依赖,我们可以快速地创建一个具备各种功能的独立运行的应用。Vue2则是一款轻量级的前端MVVM(Model-View...
在本实战教程中,我们将深入探讨如何使用Spring Tool Suite (STS) 创建一个全面的Spring Boot应用,涵盖了多个关键领域,包括RESTful接口、数据库交互、用户认证、分布式Token的实现(JWT)、Redis缓存操作、日志...
在本文中,我们将深入探讨如何使用Spring Boot、Spring Security以及JSON Web Token(JWT)来构建一个安全的Web应用程序。Spring Boot简化了Java应用的开发,而Spring Security则提供了强大的安全框架,JWT则是一种...
Spring Boot是Spring生态中的一个核心组件,它简化了创建独立的、生产级别的基于Spring的应用程序的过程。这个设计与实现涉及到的是一个在线选房网站,意味着它可能包含用户界面、房源展示、预订系统等功能。 描述...