`
357029540
  • 浏览: 737171 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Restful风格服务端应用的Spring Boot + Spring Security配置

阅读更多

         参考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

  • 大小: 31.1 KB
  • 大小: 2.9 KB
  • 大小: 22.2 KB
  • 大小: 16.8 KB
分享到:
评论
2 楼 357029540 2017-03-22  
acg6567 写道
你好,请问这种方式在登陆的时候,用户名密码正确的情况下,响应回来的数据是:
<Response body is empty>
为什么没有在登陆成功的情况下自动的去调用/login对于的方法呢

哪你的权限信息这些设置没有,还有你的跳转设置是否正确
1 楼 acg6567 2017-03-19  
你好,请问这种方式在登陆的时候,用户名密码正确的情况下,响应回来的数据是:
<Response body is empty>
为什么没有在登陆成功的情况下自动的去调用/login对于的方法呢

相关推荐

    Spring Boot + vue 药品共享平台

    这个平台利用了Spring Boot后端框架和Vue.js前端框架的优势,实现了高效、响应式的用户体验和稳定的服务端处理能力。 ### Spring Boot Spring Boot是Spring框架的一个扩展,简化了Java应用的初始搭建以及开发过程。...

    基于spring boot+vue的前后端分离外卖系统.zip

    后端部分,Spring Boot作为服务端框架,提供RESTful API接口供前端调用。Spring Data JPA简化了数据库操作,通过ORM(对象关系映射)将Java实体类与数据库表关联,使得开发者可以使用面向对象的方式来操作数据库。...

    Spring Boot+VUE《校园在线拍卖系统》

    这个系统旨在为校园内的用户提供一个便捷、安全的线上拍卖平台,通过集成VUE.js进行前端交互设计,后端则利用Spring Boot框架进行服务端开发,结合Mysql数据库存储和管理数据。 Spring Boot作为Java领域的轻量级...

    Spring Boot+Vue前后端分离项目练习01之网盘项目的搭建

    Spring Boot是Spring框架的一个扩展,它简化了创建独立的、生产级别的基于Spring的应用程序的过程。通过自动配置和起步依赖,Spring Boot可以使开发者快速启动和运行项目。 2. **Vue.js**: Vue.js是一个轻量级的...

    「小鸣助手」项目服务端源码,使用 Spring Boot 框架

    通过内置的默认配置,Spring Boot允许开发者快速搭建应用,并减少了常规的配置工作。 描述中的“springboot”进一步强调了项目的技术栈。Spring Boot的核心特点包括起步依赖(Starter Dependencies)、嵌入式Web...

    spring-boot-security.zip

    Spring Boot Security是一个强大的工具,用于在Spring Boot应用中轻松实现安全控制。它简化了安全配置,使得开发者可以快速地为应用程序添加认证和授权功能。在本文中,我们将深入探讨Spring Boot 2.0与Security的...

    paypal国际支付springboot版本

    通过内置的Tomcat服务器和自动配置特性,Spring Boot可以使开发者快速构建可运行的应用程序。 2. **PayPal API** PayPal是全球领先的在线支付平台,提供了丰富的API接口供开发者集成到各种应用中。这些API包括但不...

    Restful WebService + Spring

    1. **配置**:通过`@EnableWebMvc`或在Spring Boot中使用`spring-boot-starter-web`启动器启用Web MVC支持。 2. **URL映射**:使用`@RequestMapping`和其子注解来定义URL路径和HTTP方法映射。 3. **HTTP消息转换器**...

    基于Spring Boot 、Spring Security的RBAC权限管理系统, 做更简洁的后台管理系统.zip

    在本系统中,Spring Boot作为基础框架,提供了自动配置、内嵌式Web服务器(如Tomcat)、健康检查、Actuator等特性,使得系统能快速运行并提供RESTful服务。 2. **Spring Security** Spring Security是Spring生态...

    Tamboot是一个基于 Spring Boot的JAVA服务端开发框架,封装了服务端开发常用的一些基础模块.zip

    Tamboot 是一个专为 Java 服务端开发设计的框架,它基于业界广泛采用的 Spring Boot 技术,旨在简化和加速开发过程,提供了一系列预配置和封装的基础模块。Spring Boot 以其开箱即用、简化配置的特点深受开发者喜爱...

    spring-boot-basic-auth:使用基本身份验证的安全Spring Boot REST API

    在本文中,我们将深入探讨如何使用Spring Boot和Spring Security实现基于基本身份验证(Basic Authentication)的安全RESTful API。Spring Boot简化了创建独立、生产级别的基于Spring的应用程序,并且Spring ...

    Java服务端+Vue前端+Android移动端+iOS移动端全栈系列源代码

    1. **Spring Boot框架**:快速构建Web应用,内置Tomcat服务器,简化配置。 2. **RESTful API设计**:通过HTTP协议,提供JSON格式的数据接口,便于前后端分离。 3. **JPA(Java Persistence API)**或**MyBatis**:...

    一个基于命令行使用Spring Initializr生成Spring Boot项目的步骤,并附带一个简单的Maven构建和运行脚

    - **Spring Web**:适用于构建RESTful API的服务端应用; - **Spring Data JPA**:用于实现基于JPA的数据持久化操作; - **Thymeleaf**:一个现代服务器端的Java模板引擎,用于渲染HTML视图模板; - **Spring ...

    springboot+axis1.4

    在IT行业中,Spring Boot是一个非常流行的Java框架,用于简化Spring应用程序的初始设置和...这个过程中涉及的知识点涵盖了Spring Boot的启动配置、依赖管理、Web服务的创建与暴露、以及应用的测试与部署等多个方面。

    springboot restful

    **Spring Boot RESTful 教程** 在现代Web开发中,RESTful API已经成为构建可扩展、模块化和松耦合系统的重要部分。Spring Boot,作为Java生态中的明星框架,以其简化配置和快速启动的优势,深受开发者喜爱。结合...

    基于Spring Boot和Vue2开发的前后端分离的后台管理系统.zip

    Spring Boot是Java领域的一个热门框架,它简化了Spring应用的初始搭建以及开发过程,通过预配置的starter pom依赖,我们可以快速地创建一个具备各种功能的独立运行的应用。Vue2则是一款轻量级的前端MVVM(Model-View...

    STS创建Spring Boot项目实战(Rest接口、数据库、用户认证、分布式Token JWT、Redis操作、日志和统一异常处理)

    在本实战教程中,我们将深入探讨如何使用Spring Tool Suite (STS) 创建一个全面的Spring Boot应用,涵盖了多个关键领域,包括RESTful接口、数据库交互、用户认证、分布式Token的实现(JWT)、Redis缓存操作、日志...

    springboot+security+jwt的demo

    在本文中,我们将深入探讨如何使用Spring Boot、Spring Security以及JSON Web Token(JWT)来构建一个安全的Web应用程序。Spring Boot简化了Java应用的开发,而Spring Security则提供了强大的安全框架,JWT则是一种...

    Java毕业设计——基于spring boot的在线选房网站设计与实现(源码+数据库).7z

    Spring Boot是Spring生态中的一个核心组件,它简化了创建独立的、生产级别的基于Spring的应用程序的过程。这个设计与实现涉及到的是一个在线选房网站,意味着它可能包含用户界面、房源展示、预订系统等功能。 描述...

Global site tag (gtag.js) - Google Analytics