SpringSecurity核心功能:认证、授权、攻击防护(防止伪造身份)

涉及的依赖如下:

org.springframework.boot

spring-boot-starter-security

新建一个项目,添加如上依赖,在控制器controller中测试,指定url,比如

@Controller

public class UserController {

@RequestMapping(value="/hello")

@ResponseBody

public String hello(){return "=======Welcome to HelloWorld==============";}

}

如上,原本启动项目后,在地址栏中输入http://localhost:8080/hello应该显示返回的内容

然而此次加了安全验证后,不管url中访问的地址是什么,hello还是hello111,均返回login页面,如下

此时系统都没有连DB,用户名和密码是什么?

控制台中有消息,比如Using generated security password: 76dade1c-f190-44f8-915c-7a6b6917fb9a【每次随机生成的密码】

将用户名 user 和 密码 76dade1c-f190-44f8-915c-7a6b6917fb9a 填入上面对话框中,点击按钮Sign in

则此时能成功显示

若之前范文的页面是其他的,控制器中未配置的,则重定向后返回页面不存在。

当前自己的项目中,总不能用系统生成的密码进行登录获得权限,那不要被别人笑死。

进阶阶段:

我简单创建了一张表,希望该表的人输入匹配的用户名和密码后,方能登录。

CREATE TABLE `admin_user`(

`id` int(4) NOT NULL AUTO_INCREMENT,

`username` VARCHAR(100),

`password` VARCHAR(100),

`role` VARCHAR(100),

`realname` VARCHAR(100),

`mobile` VARCHAR(2000),

`state` BIT default 0,

`info` VARCHAR(200),

PRIMARY KEY (`id`)

)ENGINE=InnoDB AUTO_INCREMENT=300;

塞了几条数据进去,然后我希望用户在页面上进行登录,那我必须还要创建一个User对象,所谓登录就是传入username和password匹配的场景,只要匹配,就登录成功,跳转到之前的url

public class User {

private int id;

private String name;

private String password; 省略 getter and setter}

public interface UserService {

User login(String name, String password);

}

@Service

public class UserServiceImpl implements UserService {

@Autowired

private JdbcTemplate jdbcTemplate;

@Override

public User login(String name, String password) {

String sql ="select * from admin_user where username =? and password = ?";

User user =jdbcTemplate.queryForObject(sql,new UserRowMapper(),name,password);

return user;

}

}

public class UserRowMapper implements RowMapper {

@Override

public User mapRow(ResultSet resultSet, int i) throws SQLException {

//此处要使用表中的字段,不能使用属性

int id =resultSet.getInt("id");

String username = resultSet.getString("username");

String password = resultSet.getString("password");

//String role = resultSet.getString("role");

User user = new User();

user.setId(id);

user.setName(username);

user.setPassword(password);

return user;

}

}

登录的方法啪啪啪很快就写好了,我要怎么让系统知道,所有的请求,要先进行登录呢,登录的URL是什么?

先看看别人的代码,貌似是实现了UserDetailsService 接口,而点进去发现该接口就一个方法

package org.springframework.security.core.userdetails;

public interface UserDetailsService {

UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException;

}

通过一个String类型的变量val1,获取用户的详细信息。。。怎么跟我想的不太一样?

再点进去发现UserDetails 也是一个接口

package org.springframework.security.core.userdetails;

import java.io.Serializable;

import java.util.Collection;

import org.springframework.security.core.GrantedAuthority;

public interface UserDetails extends Serializable {

Collection extends GrantedAuthority> getAuthorities();

String getPassword();

String getUsername();

boolean isAccountNonExpired();

boolean isAccountNonLocked();

boolean isCredentialsNonExpired();

boolean isEnabled();

}

一个集合,收集权限,结合做过的项目,有的权限是超级管理员,有的权限是普通管理员,又或者有的删,有新增,有更新等等权限;两个返回String的方法;

还有判断账户是否过期,被锁,验证是否过期,是否开启了。。。

springboot 按钮权限验证_springboot学习之权限系统登录验证SpringSecurity相关推荐

  1. ExtJs学习篇---OA系统登录界面设计

    今天在网上看到了一个案例,于是就跟着练习了下,也就当作这几天学习的一个应用吧! 部署图如下: login.js //Ext.BLANK_IMAGE_URL是空白图片的地址 Ext.BLANK_IMAG ...

  2. linux 利用Google身份验证器配置ssh完成双重登录验证

    一:准备一台linux 操作系统 在Ubuntu上安装Google身份验证器 sudo apt-get install libpam-google-authenticator -y 在centos上安 ...

  3. html登录验证功能,续:实现用户登录验证功能

    一.提纲 1.Previously前情提要 已经把Thymeleaf部署到项目中: 把前端开发的静态资源成功引入到项目中: 完成登录验证功能,登录成功跳转到success.html页面,登录失败跳转到 ...

  4. springboot获取项目路径_springboot学习

    1. Thymeleaf语法详解-字符串操作 (1) th:text的作用是什么? Html中输出的值 (2) th:value的作用是什么? 可以放置到inputvalue标签中的值 (3) 什么是 ...

  5. jsp用户登录验证_Java之使用过滤器进行登录验证

    前言 过滤器是一种 Java 组件,这一点与 Servlet 类似,用于在请求发到 Servlet 之前进行拦截并处理,或者在 Servlet 执行完毕之后,在发送回客户端之前对响应进行拦截并处理. ...

  6. 用户登录验证最多3次java_用户登录验证,验证次数最多3次

    package blog; import java.util.Scanner; public class log_in { public static void main(String[] args) ...

  7. 统一登录验证统一返回格式统一异常处理的实现

    统一登录验证&统一返回格式&统一异常处理的实现 一.用户登录权限效验 1.1 最初的用户登录验证 1.2 Spring AOP 用户统一登录验证的问题 1.3 Spring 拦截器 1 ...

  8. IC验证培训——SystemVerilog与UVM,IC验证线上培训九月澎湃将至

    ​ 路科验证精品线下培训 为响应全国各地心心念路科验证培训的路粉们,路科将在9月1日进行线上培训,线上报名方式如下: 手机安卓端(暂不支持iOS)可在[腾讯课堂]APP搜索"路科验证&quo ...

  9. CPU系统级验证——概览索引

    1. RISC-V CPU核指令集验证分析 1 wujian100 (1)SoC核分析 无剑100实际上是一款低功耗SoC,采用的CPU核是E902. core通过AHB总线与Icache相连 (2) ...

最新文章

  1. 机器人建模中移动关节如何建立坐标系_机器人工程师进阶之路(八)指数积(PoE)建立机械臂模型及正运动...
  2. 达梦数据库操作记录_达梦数据库常用功能及命令记录 -- 持续更新
  3. 噩耗...............
  4. MySQL 为什么我的MySQL会“抖一下“?
  5. 项目中用到的设计模式(持续更新)
  6. 用反射通过构造函数给窗体传参
  7. 【转】彻底搞清计算结构体大小和数据对齐原则
  8. neo4j 两个点创建关系_Neo4j:找到两个纬度/经度之间的中间点
  9. Trade Stages - The Trade Path
  10. memlock mysql_mysql配置详解(不断更新)
  11. 利用scrapy框架爬取动态加载的数据
  12. AMD: Developer Guides, Manuals ISA Documents
  13. MySQL 5.7.27 MGR 单主/多主+ ProxySQL
  14. 铝电解电容总结[转]
  15. x86 vt-d在linux中的应用
  16. html如何用表格做二级菜单栏,Excel表格制作二级下拉菜单步骤
  17. mp4 box linux,MP4Box
  18. 回溯算法 --- 例题6.最大团问题
  19. 【陪客户领导吃饭四部曲】
  20. SkeyeVSS智能化旅游景区安防视频监控解决方案

热门文章

  1. 0112作业 字符串练习
  2. GridView中TextBox 有内容,选中当前行CheckBox
  3. webbrowser填充textarea的问题
  4. Visual Studio 2010 第一时间体验旗舰版
  5. 153.复用的相关概念 154.信道共享技术有哪些?
  6. oracle backup arch,ORCLE RMAN备份脚本
  7. java图书凭租_如何通过java一步实现租书系统
  8. oracle if后面为null,Oracle中NVL2 和NULLIF的用法
  9. mysql版本的索引类型_【mysql】索引 回表 覆盖索引 索引下推
  10. linux基础试卷笔试,顽石系列:Linux基础笔试