文档章节

Spring Boot Spring Security Demo

慕容若冰
 慕容若冰
发布于 2016/12/08 20:39
字数 545
阅读 178
收藏 3
  1. 新建Spring Boot项目,依赖为JPA,Security,Thymeleaf并tian添加MySQL驱动和Thymeleaf的Spring Security支持
  2. <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.2</version>
    </dependency>
    
    <dependency>
       <groupId>org.thymeleaf.extras</groupId>
       <artifactId>thymeleaf-extras-springsecurity4</artifactId>
    </dependency>
  3. application.properties配置如下
  4. spring.datasource.url = jdbc:mysql://localhost:3306/jpa
    spring.datasource.username = root
    spring.datasource.password =
    spring.datasource.driverClassName = com.mysql.jdbc.Driver
    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.show-sql=true
    spring.jackson.serialization.indent_output=true
    
    logging.level.org.springframework.security=INFO
    spring.thymeleaf.cache=fals
  5. 用户和角色类
    1. /**
       * 用户类
       * Created by Administrator on 2016/12/8.
       */
      @Entity
      public class SysUser implements UserDetails {
      
          private static final long serialVersionUID = 1L;
      
          @Id
          @GeneratedValue
          private Long id;
      
          private String username;
      
          private String password;
      
          //配置用户与角色多对多关系
          @ManyToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.EAGER)
          private List<SysRole> roles;
      
          //将用户的角色作为权限
          @Override
          public Collection<? extends GrantedAuthority> getAuthorities() {
              List<GrantedAuthority> auths = new ArrayList<GrantedAuthority>();
              List<SysRole> roles = this.getRoles();
              for (SysRole role : roles) {
                  auths.add(new SimpleGrantedAuthority(role.getName()));
              }
              return auths;
          }
      
          @Override
          public boolean isAccountNonExpired() {
              return true;
          }
      
          @Override
          public boolean isAccountNonLocked() {
              return true;
          }
      
          @Override
          public boolean isCredentialsNonExpired() {
              return true;
          }
      
          @Override
          public boolean isEnabled() {
              return true;
          }
  6. 数据访问
  7. package com.spingsecurity.dao;
    
    import com.spingsecurity.entity.SysUser;
    import org.springframework.data.jpa.repository.JpaRepository;
    
    /**
     * Created by Administrator on 2016/12/8.
     */
    public interface SysUserRepository extends JpaRepository<SysUser, Long> {
    
        SysUser findByUsername(String username);
    }
  8. 自定义UserDetailsService
  9. package com.spingsecurity.security;
    
    import com.spingsecurity.dao.SysUserRepository;
    import com.spingsecurity.entity.SysUser;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.core.userdetails.UserDetails;
    import org.springframework.security.core.userdetails.UserDetailsService;
    import org.springframework.security.core.userdetails.UsernameNotFoundException;
    
    /**
     * Created by Administrator on 2016/12/8.
     */
    public class CustomUserService implements UserDetailsService {
    
        @Autowired
        SysUserRepository userRepository;
    
        //重写loadUserByUsername方法获得用户
        @Override
        public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
            SysUser user = userRepository.findByUsername(username);
            if (user == null) {
                throw new UsernameNotFoundException("用户名不存在");
            }
            return user;
        }
    }
  10. Spring MVC配置
  11. package com.spingsecurity.config;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    
    /**访问/login转向login.html页面
     * Created by Administrator on 2016/12/8.
     */
    @Configuration
    public class WebMvcConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/login").setViewName("login");
        }
    }
  12. Spring Security 配置
  13. package com.spingsecurity.config;
    
    import com.spingsecurity.security.CustomUserService;
    import org.springframework.context.annotation.Bean;
    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.configuration.WebSecurityConfigurerAdapter;
    import org.springframework.security.core.userdetails.UserDetails;
    import org.springframework.security.core.userdetails.UserDetailsService;
    
    /**
     * Created by Administrator on 2016/12/8.
     */
    @Configuration
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
        //注册CustomUserService的Bean
        @Bean
        UserDetailsService customUserService() {
            return new CustomUserService();
        }
    
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            //添加自定义的user detail service认证
            auth.userDetailsService(customUserService());
        }
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
                    .anyRequest().authenticated()//所有请求需要认证才能访问
                    .and()
                    .formLogin()//定制登陆行为
                        .loginPage("/login")
                        .failureUrl("/login?error")
                        .permitAll()//登录页面可任意访问
                    .and()
                    .logout().permitAll();//定制注销行为,注销请求可任意访问
        }
    }
  14. 控制器
  15. package com.spingsecurity.web;
    
    import com.spingsecurity.entity.Msg;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
     * Created by Administrator on 2016/12/8.
     */
    @Controller
    public class HomeController {
    
        @RequestMapping("/")
        public String index(Model model) {
            Msg msg = new Msg("测试标题", "测试内容", "额外信息,只对管理员显示");
            model.addAttribute("msg", msg);
            return "home";
        }
    }
  16. 运行,访问http://localhost:8080,自动跳转http://localhost:8080/login
  17. 源码:https://git.oschina.net/NeedLoser/Spring-Boot.git

© 著作权归作者所有

共有 人打赏支持
慕容若冰
粉丝 1
博文 44
码字总数 9774
作品 0
广州
程序员
私信 提问
Spring boot的Gradle配置

问题 最近尝试把自己现有的Maven工程转到Gradle工程上面来。 build.gradle 这是转化后的Gradle依赖管理。 pom.xml 这是原来的Maven依赖配置。

亚林瓜子
2018/11/02
0
0
SpringCloud2.0入门4-springboot-admin监控

前言 上一节为springboot项目添加springboot-admin监控 学习了基于springboot1.5自己注册到admin的方法。接下来学习结合Eureka使用以及2.0的改变。 1.5spring-boot-admin集成eureka 我们继续...

ryan-miao
2018/06/29
0
0
Spring Boot 项目搭建

从根本上来说,Spring Boot的项目只是普通的Spring项目,只是它们正好用到了Spring Boot的起步依赖和自动配置而已。因此,那些你早已熟悉的从头创建Spring项目的技术或工具,都能用于Spring ...

爆米花9958
2018/08/31
0
0
为springboot项目添加springboot-admin监控

我们知道spring-boot-actuator暴露了大量统计和监控信息的端点,spring-boot-admin 就是为此提供的监控项目。 先来看看大概会提供什么样的功能 从图中可以看出,主要内容都是由spring boot a...

ryan-miao
2018/06/12
0
0
Spring Security开发安全的REST服务

第1章 课程导学 项目介绍 Java实战:Spring Security开发安全的REST服务,来自慕客网的视频 ,主要讲认证和授权。 企业级的认证和授权 从0开始实现一个可重用的,企业级的,认证和授权模块。...

yysue
2018/09/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
8
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
3
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
4
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
3
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部