文档章节

Spring Boot Spring Security Demo

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

亚林瓜子
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
06/29
0
0
锱铢必较:在spring boot中使用spring security的filter防止CSRF攻击

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

大神带我来搬砖
03/06
0
0
为springboot项目添加springboot-admin监控

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

ryan-miao
06/12
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

没有更多内容

加载失败,请刷新页面

加载更多

使用 React 和 Vue 创建相同的应用,他们有什么差异?

在工作中应用 Vue 之后,我对它有了相当深刻的理解。 不过,俗话说「外国的月亮比较圆」,我好奇「外国的」 React 是怎么样的。 我阅读了 React 文档并观看了一些教程视频,虽然它们很棒,但...

阿K1225
25分钟前
0
0
如何使用Kubernetes的configmap通过环境变量注入到pod里

在Kubernetes官网里,有这样一篇文章,提到了Kubernetes里的一个最佳实践就是把应用代码同配置信息分开,一种方式就是使用Kubernetes 1.2里引入的configmap概念。 https://kubernetes.io/bl...

JerryWang_SAP
41分钟前
0
0
2天闭门培训|以太坊智能合约从入门到实战(北京)

2天培训 16个课时 探寻技术原理,精通以太坊智能合约开发 以太坊智能合约是现在应用的最广泛的区块链应用开发方式,HiBlock区块链社区针对以太坊智能合约的学习特别推出2天闭门研修班,通过2...

HiBlock
43分钟前
0
0
限定某个目录禁止解析php,限制user_agent,php相关配置

11月20日任务 11.28 限定某个目录禁止解析php 11.29 限制user_agent 11.30/11.31 php相关配置 1.限定某个目录禁止解析php 核心配置文件内容 <Directory /data/wwwroot/www.123.com/upload> p...

hhpuppy
54分钟前
3
0
Spring的好文章

孤傲苍狼 https://www.cnblogs.com/xdp-gacl/p/4249939.html 跟我学spring http://jinnianshilongnian.iteye.com/blog/1413846 SpringIoc 和Spring Aop 代理模式: 静态代理 动态代理 cglib代......

wangwei2134
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部