文档章节

Spring Boot Spring Security Demo

慕容若冰
 慕容若冰
发布于 2016/12/08 20:39
字数 545
阅读 161
收藏 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

© 著作权归作者所有

共有 人打赏支持
慕容若冰
粉丝 0
博文 44
码字总数 9774
作品 0
广州
程序员
SpringCloud2.0入门4-springboot-admin监控

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

ryan-miao
06/29
0
0
为springboot项目添加springboot-admin监控

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

ryan-miao
06/12
0
0
锱铢必较:在spring boot中使用spring security的filter防止CSRF攻击

在一个spring boot项目中,需要防止CSRF攻击,按理说应该集成spring security才对。 但是不想使工程变得太复杂,这时可以只把spring security中的相关filter引入来进行。 在pom中添加相关依赖...

大神带我来搬砖
03/06
0
0
Spring Security开发安全的REST服务

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

yysue
09/02
0
0
spring-security-oauth2-boot 2.0.3 发布

spring-security-oauth2-boot 2.0.3 已发布。该项目提供 了spring-security-oauth2 和 Spring Boot 2 的集成(即自动配置)。 未发现具体的更新说明,由提交信息可知, 主要是修复了关于 Sp...

淡漠悠然
08/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Flask 开发填坑

插件的选择: flask-security 真的是个鸡肋啊。自带的页面,好丑。还不如用flask-login来做呢。

pearma
13分钟前
0
0
讲述下 :LVM逻辑卷管理遇到的问题

LVM学习逻辑卷管理创建逻辑卷遇到的问题 1 实验环境 系统 内核 发行版本 CentOS 2.6.32-754.2.1.el6.x86_64 CentOS release 6.10 (Final) 由于是最小化安装没有xfs命令,yum安装如下包支持此...

linuxprobe16
48分钟前
0
0
day95-20180922-英语流利阅读-待学习

Hey Jude 半个世纪传唱不衰的背后故事 毛西 2018-09-22 1.今日导读 2004 年,The Beatles 被《滚石》杂志选为“历史上最伟大的 50 位流行音乐家的第一位”。这四名来自英国利物浦的男孩不仅对...

飞鱼说编程
55分钟前
1
0
OSChina 周六乱弹 —— 放假前期焦虑症晚期

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享Matteo的单曲《Panama》: 《Panama》- Matteo 手机党少年们想听歌,请使劲儿戳(这里) @新垣吉衣OSC :我发现只要去有小朋友...

小小编辑
今天
193
10
wait()被notify()后,接着执行wait()后面的语句

wait()被notify()后,接着执行wait()后面的语句

noteman
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部