Рубрики
Без рубрики

Пример аннотации Spring Security Hello World

– Пример аннотации Spring Security Hello World

Автор оригинала: mkyong.

В предварительном просмотре публикации мы используем XML-файлы для настройки безопасности Spring в среде Spring MVC. В этом уроке мы покажем вам, как преобразовать предыдущий проект Spring Security на основе XML в чистый проект аннотаций Spring.

Используемые технологии:

  1. Пружина 3.2.8.ОТПУСТИТЕ
  2. Пружинная защита 3.2.3.ВЫПУСК
  3. Затмение 4.2
  4. JDK 1.6
  5. Мавен 3
  6. Tomcat 7 (сервлет 3.x)

Несколько Заметок

  1. В этом руководстве используется WebApplicationInitializer для автоматической загрузки загрузчика контекста Spring, который поддерживается только в контейнере Servlet 3.x, например, Tomcat 7 и Jetty 8.
  2. Так как мы используем webapplicationинициализатор , в web.xml файл НЕ требуется.
  3. Аннотации безопасности Spring поддерживаются в более старом контейнере Servlet 2.x, например, Tomcat 6. Если вы используете классический XML-файл для загрузки контекста Spring, этот учебник по-прежнему можно развернуть в контейнере Servlet 2.x, например, Tomcat 6

1. Демонстрация проекта

Посмотрите, как это работает.

2. Структура каталогов

Ознакомьтесь с окончательной структурой каталогов этого руководства.

3. Зависимости безопасности Spring

Чтобы использовать Spring security, вам нужно spring-security-web и spring-security-config .

	
		1.6
		3.2.8.RELEASE
		3.2.3.RELEASE
		1.2
	

	

		
		
			org.springframework
			spring-core
			${spring.version}
		

		
			org.springframework
			spring-web
			${spring.version}
		

		
			org.springframework
			spring-webmvc
			${spring.version}
		

		
		
			org.springframework.security
			spring-security-web
			${spring.security.version}
		

		
			org.springframework.security
			spring-security-config
			${spring.security.version}
		

		
		
			jstl
			jstl
			${jstl.version}
		

	

4. Веб-приложение Spring MVC

Веб-приложение Spring MVC

  1. Если URL = /добро пожаловать или /|/, верните страницу приветствия. Если URL =
  2. /администратор , верните страницу администратора. Если URL =
  3. /дба , верните страницу администратора.

Позже мы обеспечим /администратор и /dba URL-адреса.

package com.mkyong.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {

	@RequestMapping(value = { "/", "/welcome**" }, method = RequestMethod.GET)
	public ModelAndView welcomePage() {

		ModelAndView model = new ModelAndView();
		model.addObject("title", "Spring Security Hello World");
		model.addObject("message", "This is welcome page!");
		model.setViewName("hello");
		return model;

	}

	@RequestMapping(value = "/admin**", method = RequestMethod.GET)
	public ModelAndView adminPage() {

		ModelAndView model = new ModelAndView();
		model.addObject("title", "Spring Security Hello World");
		model.addObject("message", "This is protected page - Admin Page!");
		model.setViewName("admin");

		return model;

	}

	@RequestMapping(value = "/dba**", method = RequestMethod.GET)
	public ModelAndView dbaPage() {

		ModelAndView model = new ModelAndView();
		model.addObject("title", "Spring Security Hello World");
		model.addObject("message", "This is protected page - Database Page!");
		model.setViewName("admin");

		return model;

	}

}

Две страницы JSP.

<%@page session="false"%>


	

Title : ${title}

Message : ${message}

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page session="true"%>


	

Title : ${title}

Message : ${message}

Welcome : ${pageContext.request.userPrincipal.name} | " > Logout

5. Конфигурация безопасности Spring

5.1 Создайте файл конфигурации безопасности Spring с аннотацией @EnableWebSecurity

package com.mkyong.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

	@Autowired
	public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
	  auth.inMemoryAuthentication().withUser("mkyong").password("123456").roles("USER");
	  auth.inMemoryAuthentication().withUser("admin").password("123456").roles("ADMIN");
	  auth.inMemoryAuthentication().withUser("dba").password("123456").roles("DBA");
	}

	@Override
	protected void configure(HttpSecurity http) throws Exception {

	  http.authorizeRequests()
		.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
		.antMatchers("/dba/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_DBA')")
		.and().formLogin();
		
	}
}

Эквивалент XML-файла Spring Security:

	
		
		
	

	
	  
	    
		
		
		
	    
	  
	

5.2 Создание класса расширяет abstractsecuritywebapplicationинициализатор , он автоматически загрузит цепочку springSecurityFilterChain |/.

package com.mkyong.config.core;

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;

public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer {
   //do nothing
}

Эквивалент безопасности пружины в web.xml файл:

	
		springSecurityFilterChain
		org.springframework.web.filter.DelegatingFilterProxy
                
	

	
		springSecurityFilterChain
		/*
	

6. Конфигурация Spring MVC

6.1 Класс конфигурации, определите технологию представления и импортируйте выше SecurityConfig.java .

package com.mkyong.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

@EnableWebMvc
@Configuration
@ComponentScan({ "com.mkyong.web.*" })
@Import({ SecurityConfig.class })
public class AppConfig {

	@Bean
	public InternalResourceViewResolver viewResolver() {
		InternalResourceViewResolver viewResolver 
                          = new InternalResourceViewResolver();
		viewResolver.setViewClass(JstlView.class);
		viewResolver.setPrefix("/WEB-INF/pages/");
		viewResolver.setSuffix(".jsp");
		return viewResolver;
	}
	
}

Эквивалент XML-файла Spring:

	

	
		
			/WEB-INF/pages/
		
		
			.jsp
		
	

6.2 Создать Инициализатор класс, чтобы загрузить все.

package com.mkyong.config.core;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import com.mkyong.config.AppConfig;

public class SpringMvcInitializer 
       extends AbstractAnnotationConfigDispatcherServletInitializer {

	@Override
	protected Class[] getRootConfigClasses() {
		return new Class[] { AppConfig.class };
	}

	@Override
	protected Class[] getServletConfigClasses() {
		return null;
	}

	@Override
	protected String[] getServletMappings() {
		return new String[] { "/" };
	}
	
}

Сделано.

7. Демонстрация

7.1. Страница Приветствия – http://localhost:8080/spring-security-helloworld-annotation/welcome

7.2 Попытайтесь получить доступ /администратор страница, Spring Security перехватит запрос и перенаправит на /вход , и отобразится форма входа по умолчанию.

7.3. Если имя пользователя и пароль неверны, будут отображаться сообщения об ошибках, и Spring перенаправит на этот URL-адрес /логин?ошибка .

7.4. Если имя пользователя и пароль верны, Spring перенаправит запрос на исходный запрошенный URL-адрес и отобразит страницу.

7.5. Для неавторизованного пользователя Spring отобразит страницу 403 “Доступ запрещен”. Например, пользователь “mkyong” или “dba” пытается получить доступ к URL-адресу /admin .

Скачать Исходный Код

Рекомендации

  1. Весенняя безопасность
  2. Предварительный просмотр конфигурации Java Spring Security: Веб-безопасность
  3. Привет, Весенний MVC Конфигурация Java для обеспечения безопасности
  4. Википедия: Сервлет Javax
  5. Википедия: Apache Tomcat
  6. Пример XML-кода Spring Security Hello World

Оригинал: “https://mkyong.com/spring-security/spring-security-hello-world-annotation-example/”