Spring Security 自定义登录界面

一、Spring Security 简介

Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。

一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。

用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。

用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

#二、pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.xhgroupId>
    <artifactId>SpringSecurity-DemoartifactId>
    <packaging>warpackaging>
    <version>1.0.0-SNAPSHOTversion>

    <name>SpringSecurity-Demo Maven Webappname>
    <url>http://maven.apache.orgurl>

    <dependencyManagement>
        <dependencies>
            
            <dependency>
                <groupId>io.spring.platformgroupId>
                <artifactId>platform-bomartifactId>
                <version>Brussels-SR11version>
                
                <type>pomtype>
                <scope>importscope>
            dependency>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                
                <version>Edgware.SR4version>
                
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-oauth2artifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-redisartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>
        
        <dependency>
            <groupId>commons-langgroupId>
            <artifactId>commons-langartifactId>
        dependency>
        <dependency>
            <groupId>commons-collectionsgroupId>
            <artifactId>commons-collectionsartifactId>
        dependency>
        <dependency>
            <groupId>commons-beanutilsgroupId>
            <artifactId>commons-beanutilsartifactId>
        dependency>
        
    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>2.3.2version>
                <configuration>
                    
                    <source>1.8source>
                    
                    <target>1.8target>
                    <encoding>UTF-8encoding>
                configuration>
            plugin>
        plugins>
        <finalName>SpringSecurity-DemofinalName>
    build>

project>

三、default password

在pom.xml中加入security的依赖后,启动springboot会自动启用security,当访问任何接口的时候会需要登录,例:
Spring Security 自定义登录界面_第1张图片

我访问 /user 请求就需要登录,其中默认用户名为:user,密码在启用springboot的时候,控制台打印出随机密码:
Spring Security 自定义登录界面_第2张图片

输入对应密码就可以访问接口了:
Spring Security 自定义登录界面_第3张图片

去掉security验证:在application.properties中加入以下配置:

# close spring security default configration. default username:user
security.basic.enabled = false

但是去掉security拦截,与不加security没有什么区别。

四、自定义登录页面

在源文件src/main/resources 下面新建resources文件夹,在resources文件夹下面新建登录页面:myLogin.html


<html>
<head>
<meta charset="UTF-8">
<title>登录title>
head>
<body>
    <h3>表单登录h3>
    <form action="/authentication/form" method="post">
        <table>
            <tr>
                <td>用户名:td> 
                <td><input type="text" name="username">td>
            tr>
            <tr>
                <td>密码:td>
                <td><input type="password" name="password">td>
            tr>
            <tr>
                <td colspan="2"><button type="submit">登录button>td>
            tr>
        table>
    form>
body>
html>

新建class:SecurityConfig 继承 org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter 重写 configure(HttpSecurity http) 方法 :

package com.xh.sercurity.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
//      http.httpBasic()// httpBasic 登录
        http.formLogin()// 表单登录  来身份认证
            .loginPage("/myLogin.html")// 自定义登录页面
            .loginProcessingUrl("/authentication/form")// 自定义登录路径
            .and()
            .authorizeRequests()// 对请求授权
            // error  127.0.0.1 将您重定向的次数过多
            .antMatchers("/myLogin.html", "/authentication/require",
                    "/authentication/form").permitAll()// 这些页面不需要身份认证,其他请求需要认证
            .anyRequest() // 任何请求
            .authenticated()//; // 都需要身份认证
            .and()
            .csrf().disable();// 禁用跨站攻击
    }

}

那么在访问接口时需要验证就会自动跳转到自定义的登录界面。

你可能感兴趣的:(Spring,Security)