全栈式使用 SpringBoot + SpringSecurity 做登录认证

一、前言

这里写图片描述
目前JavaEE开发中,安全框架流行的主要有两个,分别是 Shiro、SpringSecurity。
之前是都是使用 Shiro 做权限管理的,原因很简单,因为大家都说这个更简单轻量,都觉得 SpringSecurity 太笨重复杂。但是在下使用了之后,觉得还是挺简单,因为我们开发基本都要以 Spring 为核心,而 SpringSecurity 更能很好地整合在一块,其和 SpringBoot 整合更是不在话下。

二、功能演示

下面使用 SpringBoot + SpringSecurity + thymeleaf,做一个简单的登录认证,以后有空在补上授权吧
说明:
①在原式页面上,输入跳转到 main.html 的 RequestMapping localhost/main ,由于还没有登录,跳转到登录界面
②在登录界面输入正确的用户名、密码,进入main.html 这个设置好的登录成功页面
③ 点击注销按钮,又回到登录页面
这里写图片描述

为了看到输入密码的内容,type="text",而不用 type="password"

三、代码

这里写图片描述

1、后台:使用了 SpringBoot 之后,异常简单,
① SpringSecurity 配置类

package com.cun.conf;

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.WebSecurityConfigurerAdapter;

/**
 * 使用 SpringSecurity 有很多好处:
 * ①输入一个需要登录验证的url,先跳转到登录界面,登录成功后,立即跳转到刚才请求的url
 * @author linhongcun
 *
 */

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true) // 开启 SpringSecurity注解
// 1.继承WebSecurityConfigurerAdapter适配器
public class SpringSecurityConf extends WebSecurityConfigurerAdapter {
   

    // 2.重写configure(AuthenticationManagerBuilder)、configure(HttpSecurity),快捷键Alt+Shift+S
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("cun")// 用户名
            .password("123")// 用户密码
            .roles("USER");// 认证后必须加入一个角色,这里随便设为USER
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().cors().disable().headers().disable()// 一般设置去掉,否则经常报错
                .authorizeRequests()

                .anyRequest()
                .authenticated()// 其他 url 需要身份认证

                .and()
                .formLogin()  //开启登录
                .loginPage("/login")// 指定登录请求的 url
                .defaultSuccessUrl("/main") // 登录成功后的 url
                .permitAll()

                .and()
                .logout()  //开启注销
                .logoutUrl("/logout") //指定注销请求的 url (default is "/logout"). 
                .logoutSuccessUrl("/login") // 注销成功后的 url
                .permitAll();

    }

}

② 控制层

package com.cun.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class SpringSecurityController {
   

    /**
     * 发送登录请求,则跳转的到登录页面login.html
     * @return
     */
    @RequestMapping("/login")
    public String login() {
        //或者 return "/login",都一样,下面同理
        return "login"; 
    }

    /**
     * 登录成功后发送请求,则跳转到登录成功页面 mian.html
     * @return
     */
    @RequestMapping("/main")
    public String main() {
        return "main"; 
    }

}

2、前端:仅为了演示,去除所有修饰
① 登录页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" ></meta>
<title>登录界面</title>
    <link rel="stylesheet" href="../bootstrap3/css/bootstrap-theme.min.css" />
    <link rel="stylesheet" href="../bootstrap3/css/bootstrap.min.css" />
    <script type="text/javascript" src="../bootstrap3/js/jquery-1.11.2.min.js"></script>
    <script type="text/javascript" src="../bootstrap3/js/bootstrap.min.js"></script>
</head>
<style type="text/css">
    body{
        padding: 10px
    }
</style>
<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT小村

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值