请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

Spring Boot Security 入门—内存用户验证

[复制链接]
查看: 43|回复: 0

7873

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
31901
发表于 2019-11-9 17:47 | 显示全部楼层 |阅读模式
简介

作为 Spring 合家桶组件之一,Spring Security 是一个供给平安机制的组件,它垂危治理两个题目:

  • 认证:考证用户名和密码;
  • 授权:对于差别的 URL 权限纷歧样,只要当认证的用户具有某个 URL 的需要的权限时才华拜候。
Spring Security 底层操纵的是过滤器,针对 URL 举行的阻挡,对应到 Java 中也就是类; 是以被称为粗粒度授权考证,就是考证 URL ,当前用户能否有这个 URL 的权限。
入门

建立项目

操纵 Idea 建立 Spring Boot 项目,勾选需要的组件:

  • Spring Web
  • Spring Security
大要建立项目后增加依靠:
  1.     org.springframework.boot    spring-boot-starter-security    org.springframework.boot    spring-boot-starter-web
复制代码
这里操纵的是 JSP 作为模板,有关怎样在 Spring Boot 中操纵 JSP 作为模板请拜候:https://www.cnblogs.com/cloudfloating/p/11787222.html
WebSecurityConfig
  1. package top.cloudli.demo.security;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;import org.springframework.security.crypto.password.PasswordEncoder;@Configuration@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled=true)public class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(AuthenticationManagerBuilder auth) throws Exception {        PasswordEncoder encoder = new BCryptPasswordEncoder();                auth.inMemoryAuthentication()                .passwordEncoder(encoder)                .withUser("root")                .password(encoder.encode("root@123456"))                .roles("ROOT", "USER")                .and()                .withUser("user")                .password(encoder.encode("user@123456"))                .roles("USER");    }    @Override    protected void configure(HttpSecurity http) throws Exception {        http.authorizeRequests()                .antMatchers("/css/**")                .permitAll()        // css 不用考证                .anyRequest()                .authenticated()    // 此外页面全数需要考证                .and()                .formLogin()        // 操纵默许登录页面                .and()                .exceptionHandling()                .accessDeniedPage("/401")   // 无权限时跳转的页面                .and()                .logout();    }}
复制代码

  • @EnableWebSecurity 注解启用考证;
  • @EnableGlobalMethodSecurity(prePostEnabled=true) 注解答应我们在控制器的方式中操纵 @PreAuthorize 实现权限朋分。
此处建立了两个用户并保存在内存中,别离是具有 ROOT 和 USER 权限的 root 用户和仅具有 USER 权限的 user 用户。
fromLogin() 方式可以接着挪用 loginPage() 指定一个自界说登录页面,这里操纵的是默许登录页面。
编写页面

1.index.jsp,全数经过考证的用户都可以拜候:
  1.     Spring Security Demo Application        [size=6]Spring Security In Memory Authentication[/size]
  2.     [size=5]这是被保护的页面(ROLE_USER)。[/size]
复制代码
2.root.jsp,只要具有 ROOT 权限的用户能拜候:
  1.     Root Page        [size=6]Root Page[/size]
  2.     [size=5]你正在拜候受保护的页面(ROLE_ROOT)。[/size]
复制代码
3.401.jsp,没有权限时跳转的页面:
  1.     401 Unauthorized        [size=6]401 Unauthorized![/size]
  2.     [size=5]你没有权限拜候此页面。[/size]
复制代码
控制器
  1. package top.cloudli.demo.controller;import org.springframework.security.access.prepost.PreAuthorize;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;@Controllerpublic class DemoController {    @PreAuthorize("hasAnyAuthority('ROLE_USER')")    @GetMapping("/")    public String index() {        return "index";    }    @PreAuthorize("hasAnyAuthority('ROLE_ROOT')")    @GetMapping("/root")    public String root() {        return "root";    }    @GetMapping("/401")    public String accessDenied() {        return "401";    }}
复制代码
@PreAuthorize 注解指定了拜候页面所需要的权限,这里的权限要加上 ROLE_ 前缀。
Run

拜候 http://localhost:8080/ 将进入登录页面(这里操纵的是 Spring Security 的默许登录页面):
Spring Boot Security 入门—内存用户验证  游戏 spring_security_demo_login

操纵适才建立的内存用户 user 登录后将返回 index 页面:
Spring Boot Security 入门—内存用户验证  游戏 spring_security_demo_index

拜候 http://localhost:8080/root,由于 user 用户没有 ROLE_ROOT 权限,跳转到 401 页面:
Spring Boot Security 入门—内存用户验证  游戏 spring_security_demo_401

拜候 http://localhost:8080/logout 将进入默许登出页面:
Spring Boot Security 入门—内存用户验证  游戏 spring_security_demo_logout

这里的登录和登出页面都可以操纵自界说页面,只需要在自界说的页面中把数据经过 PSOT 请求提交到 /login 或 /logout 即可完成登录和登出。

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 妈妈网-中国妈妈第一,是怀孕、育儿、健康等知识交流传播首选平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表