Introdução à demonstração do SpringSecucity

Introdução à demonstração do SpringSecucity

Spring Security é uma estrutura de segurança que pode fornecer soluções declarativas de controle de acesso de segurança para sistemas de aplicativos corporativos baseados em Spring. Ele fornece um conjunto de Beans que podem ser configurados no contexto de aplicativos Spring, fazendo pleno uso das funções Spring IoC, DI (Inversão de controle, DI: injeção de dependência, injeção de dependência) e AOP (programação orientada a corte) para fornecer sistemas de aplicativos A função declarativa de controle de acesso à segurança reduz o trabalho de escrever muitos códigos repetitivos para o controle de segurança do sistema corporativo.

A seguir, passo a passo para criar e usar o primeiro projeto SpringSecurity.

Precisamos fazer os seguintes preparativos:

  • Tenha um ambiente maven
  • Crie um projeto da web baseado em maven

Introduzir arquivos de dependência

  • Como o Spring Security é desenvolvido em conjunto com o Spring, é necessário apresentar os pacotes jar relacionados ao Spring e os pacotes jar do Spring Security.
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.rayfoo</groupId>
    <artifactId>springSecurity-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <spring.version>4.2.4.RELEASE</spring.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>4.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>4.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <!-- 指定端口 -->
                    <port>9090</port>
                    <!-- 请求路径 -->
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Configurar web.xml

  • Para usar o SpringSecurity, você precisa configurar um filtro no web.xml para filtrar o caminho solicitado. Vale ressaltar que esse filtro que usamos é um proxy de filtro no Spring-web. Especifique o nome do filtro springSecurityFilterChainpara implementar automaticamente a função de interceptação do SpringSecurty.
  • Ao mesmo tempo, você também precisa carregar o arquivo de configuração SpringSecurity.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-security.xml</param-value>
    </context-param>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

Configurar o arquivo de configuração SpringSecurity

  • Como security: xx </ security: xx> é freqüentemente usado neste arquivo de configuração , no arquivo de cabeçalho, o cabeçalho do rótulo padrão pode ser especificado como segurança. <beans:beans xmlns="http://www.springframework.org/schema/security".....></beans:beans>No momento, o prefixo de segurança pode ser omitido.
  • <http></http>Tags são usadas para criar regras de interceptação.
    • use-expression: se deseja ativar expressões SCEL, o padrão é true
    • Se a expressão SCEL estiver ativada, você não poderá usar diretamente o valor literal ao criar o acesso, mas precisará usar hasRole ("ROLE_USER")
  • intercept-url: esta subtag é usada para especificar regras específicas de interceptação
    • padrão: este atributo é usado para especificar quais caminhos interceptar, por exemplo: / img significa interceptar solicitações / img / xxx (se for / img / xx / xx, não será interceptado), / * significa todos os diretórios de primeiro nível, / * * Meios para interceptar todos os pedidos. Isso é um pouco diferente do web.xml.
    • acesso: este atributo é usado para especificar um nome de função, a definição da especificação do nome da função: deve ROLE_começar com um sublinhado em maiúsculas .
  • Isso significa que uma página de login é fornecida pelo Spring Security e a senha da conta do usuário será automaticamente salta para index.html após a verificação bem-sucedida. A guia também pode especificar uma página de destino personalizada e para qual página saltar após sucesso ou falha.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">

    <!-- 页面拦截规则 -->
    <http use-expressions="false">
        <intercept-url pattern="/**" access="ROLE_USER" />
        <form-login/>
    </http>

    <!-- 认证管理器 -->
    <authentication-manager>
         <!-- 认证提供者 -->
        <authentication-provider>
            <user-service>
                <user name="admin" password="admin" authorities="ROLE_USER"/>
                <user name="root" password="root" authorities="ROLE_USER"/>
            </user-service>
        </authentication-provider>
    </authentication-manager>

</beans:beans>

Nesse momento, qualquer solicitação enviada pelo projeto de inicialização será interceptada e redirecionada para a página de login fornecida pelo SpringSecurity.Quando o login for bem-sucedido, ele automaticamente passará para index.html.

Página de destino personalizada

Como a página de destino oficial é adequada apenas para o ambiente de teste, usaremos uma página de destino personalizada no processo de produção. Como especificar a página de destino?

  • Primeiro, precisamos preparar a página de destino primeiro. Formas precisa fornecer a página de login usernamee passworddois valor nome, correspondente ao valor de duas nome é springSerurity adquiridos e em que a configuração <user name="admin" password="admin" authorities="ROLE_USER"/>corresponde exatamente o mesmo se o pouso bem-sucedido, caso contrário, falhou no pouso.

  • Devido ao tempo acima que bloqueamos / **, ao usar uma página de destino personalizada, você deve permitir recursos e páginas relacionados (páginas de destino e outras páginas que podem ser acessadas sem fazer login), caso contrário, o acesso login.html será bloqueado Direcionado para /login.html foi bloqueado novamente. . . . . Uma situação que faz com que muitas solicitações sejam inacessíveis.

  • Configure a liberação de recursos, adicione uma tag http e especifique padrão e segurança como none para liberar páginas relacionadas.

    <http pattern="/login.html" security="none"></http>
    <http pattern="/login_error_page.html" security="none"></http>
    <http pattern="/css/**" security="none"></http>
    <http pattern="/js/**" security="none"></http>
  • Resolver problemas entre domínios
    • Como o SpringSecurity suporta arquivos JSP por padrão, ele fornecerá informações de cabeçalho de solicitação quando enviar o formulário X-CSRF-TOKEN. Esse cabeçalho da solicitação pode impedir a falsificação de solicitações entre sites, geralmente conhecida como "domínio cruzado".
    • Portanto, usamos páginas html para resolver esse problema entre domínios. Precisamos desativar a proteção de domínio cruzado do SpringSecurity.
    • O rótulo deve ser configurado no <http use-expressions="false">meio.
<csrf disable="true"/>
  • Configurar uma página de destino personalizada
    • página de login: indica a página de login do usuário
    • URL-alvo-padrão: indica a página para a qual o usuário salta após o login bem-sucedido
    • URL de autenticação-falha: indica a página exibida após a falha no login
    <!-- 页面拦截规则 -->
    <http use-expressions="false">
        <intercept-url pattern="/**" access="ROLE_USER" />
        <form-login login-page = "/login.html" default-target-url = "/index.html" authentication-failure-url = "/login_error_page.html"/>
        <csrf disable="true"/>
    </http>

Autenticação de login personalizada e criptografia de senha, vejo você no próximo artigo ~

Acho que você gosta

Origin www.cnblogs.com/zhangruifeng/p/12741537.html
Recomendado
Clasificación