English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring Security XML例

このチュートリアルでは、SpringMVC フレームワーク実装 Spring Security。すべての例はSpring MVCで、Mavenプロジェクトで作成されています。

私たちが使用しているのは Spring Security 5.0.0.RELEASE バージョン、以下はmaven依存関係です。すべての例で使用しています。

<dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>5.0.0.RELEASE</version>
</dependency>
<dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>5.0.0.RELEASE</version>
</dependency>
<dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>5.0.0.RELEASE</version>
</dependency>

Spring Securityを実装するには、XMLまたはJavaベースの設定を使用できます。

XMLを使用してSpring Securityを構成する例を見てみましょう。

Mavenプロジェクトを作成します

私たちと同様に、 File メニューで New→Maven Project 以下のスクリーンショットに示されています。

プロジェクト名と場所を選択します

プロジェクト名を入力します

プロジェクト名を入力し、以下の手順でパッケージの種類を選択します war(ネットワークアーカイブ)

完了このプロジェクトは、以下のように空のディレクトリ構造を作成します。

最初は空でしたので、Spring MVCアプリケーションを作成しSpring Securityと統合しましょう。

これはプロジェクトのレイアウトです。コントローラー1つ、XMLファイル3つ、JSPファイル2つを含んでいます。

Spring Security プロジェクトのソースコード

プロジェクトの名前は springsecurity 、以下のソースファイルを含んでいます。

コントローラー

HomeController。 Java

package com.w3codebox.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HomeController {
    
    @RequestMapping(value="/", method=RequestMethod.GET)
    public String home() {
        return "home";
    }
    
    @RequestMapping(value="/admin", method=RequestMethod.GET)
    public String privateHome() {
        return "privatePage";
    }
}

Springセキュリティ設定

spring-security.xml

<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 auto-config="true">
        <intercept-url pattern="/admin" access="hasRole('ROLE_ADMIN')" />
    </http>
    <authentication-管理者>
      <authentication-プロバイダ>
        <user-サービス>
        <user name="admin" password="1234" authorities="hasRole(ROLE_ADMIN)" />
        </ユーザー-サービス>
      </認証-プロバイダ>
    </認証-管理者>
</beans:beans>

Servletデリバリーシステム

spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context.xsd">
<mvc:annotation-driven />
   <context:component-scan base-package="com.w3codebox.controller">
   </context:component-scan>
   <context:annotation-config></context:annotation-config>
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/views/></property>
      <property name="suffix" value=".jsp"></property>
   </bean>
</beans>

ウェブ記述子

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
    <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_3_1.xsd"
         version="31">
        
        <!-- Spring 設定 -->
        <servlet>
            <servlet-name>spring</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>spring</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        
        <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>
        
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/spring-servlet.xml
                /WEB-INF/spring-security.xml
            </param-value>
        </context-param>
</web-app>

プロジェクト依存関係

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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.w3codebox</groupId>
  <artifactId>springsecurity</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>   
<properties>
    <maven.compiler.target>18</maven.compiler.target>
    <maven.compiler.source>18</maven.compiler.source>
</properties>
<dependencies>
  <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
        <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>5.0.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>5.0.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>5.0.0.RELEASE</version>
    </dependency>
        
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>31.0</version>
    <scope>provided</scope>
</dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>26</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

ページを表示

home.jsp

<html>
<head>
<meta content="text/html; charset=UTF-8">
<title>Home</title>
</head>
<body>
<h2>Welcome to w3codebox spring tutorial!/h2>
</body>
</html>

privatePage.jsp

home.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Admin</title>
</head>
<body>
Hello Admin
</body>
</html>

出力

この例では、Apache Tomcat v9.0を実行。実行後、ブラウザに以下の結果が生成されます。

最初に、以下が表示されます。 home.jsp ページに以下の結果が表示されます。

管理ページに以下を入力すると、/ admin 管理ページにspring securityが追加されます。ブラウザでアプリケーションを実行すると、以下の結果が得られます。

リクエストURL: http: //localhost: 8080/springsecurity/admin

今や、これはSpring Securityが提供する実際のリソース保護の魔法です。

これはSpring Securityが提供するモジュールで、私たちはそれを作成していないことを確認しました。また、ユーザー入力を検証します。

間違った情報を提供

もし間違ったログイン情報を提供した場合、以下で使用したものを使用して認証を行います。 spring-security.xml ファイルに記載されたユーザー名とパスワードで認証を行います。

認証後、ログイン情報が正しくない場合、エラーメッセージが発生します。

この例では、Spring Securityのログインモジュールと、提供されたユーザー名とパスワードとの照合方法を見ました。

次に、さらに詳細なロジックを実装します。例えば、成功してログインした後、ユーザーを表示します。