📅  最后修改于: 2020-12-05 03:06:46             🧑  作者: Mango
Spring Framework在Spring 3.1中添加了Java配置支持。在Spring Security中,Java配置已添加到Spring Security 3.2中,使我们能够配置Spring Security而无需编写XML单行。
在这里,我们将创建一个示例,该示例实现Spring Security并在不使用XML的情况下进行配置。它包括以下步骤。
第一步是创建一个Spring Security Java配置。下面给出了一个简单的基本Java配置。
WebSecurityConfig.java
package com.javatpoint;
import org.springframework.context.annotation.*;
//import org.springframework.security.config.annotation.authentication.builders.*;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.*;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@EnableWebSecurity
@ComponentScan("com.javatpoint")
public class WebSecurityConfig implements WebMvcConfigurer {
@Bean
public UserDetailsService userDetailsService() throws Exception {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withDefaultPasswordEncoder().username("javatpoint").
password("java123").roles("USER").build());
return manager;
}
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/")
.authorizeRequests()
.anyRequest().hasRole("ADMIN")
.and()
.httpBasic();
}
}
此配置创建一个称为springSecurityFilterChain的Servlet过滤器。它负责保护应用程序URL,验证提交的用户名和密码,重定向到登录表单等。
上面的Java配置对我们的应用程序执行以下操作。
现在,我们将向war注册springSecurityFilterChain。要进行注册,Spring Security提供了我们需要扩展的基类AbstractSecurityWebApplicationInitializer。
对于Spring MVC应用程序,SecurityWebApplicationInitializer如下所示。
SecurityWebApplicationInitializer.java
package com.javatpoint;
import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
}
此代码将为我们应用程序中的每个URL注册springSecurityFilterChain。
现在,在我们现有的ApplicationInitializer中加载WebSecurityConfig并将其添加到getRootConfigClasses()方法中。
MvcWebApplicationInitializer.java
package com.javatpoint;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class MvcWebApplicationInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class>[] getRootConfigClasses() {
return new Class[] { WebSecurityConfig.class };
}
@Override
protected Class>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
WebSecurityConfigurerAdapter类提供了一个configure(HttpSecurity http)方法,该方法包含以下默认配置。默认定义如下所示。
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic();
}
它类似于给定的XML。
此方法执行以下操作。
创建一个控制器来处理用户请求。
HomeController.java
package com.javatpoint.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 index() {
return "index";
}
}
我们有一个视图(.jsp)页面index.jsp ,其中包含以下源代码。
Home Page
Welcome to home page!
我们完整的项目如下所示。
输出:
我们在控制器中只有一个操作,只有真正的用户才能访问它。因此,当我们运行该应用程序时,它会提示您输入登录凭据。输出如下。
这是Spring Security提供的默认登录页面,我们没有创建它。尽管我们可以创建自己的登录页面并使用应用程序进行配置。我们将在下一个主题中进行此操作。
好了,现在,提供登录凭据以进入应用程序资源。 Spring Security验证用户凭据,并确保该用户是真实的。
让我们看看,会发生什么?如果输入错误的凭据。
单击登录按钮后,它会引发Bad Credentials错误。
现在,使用正确的凭据登录。
这次凭证被匹配并显示我们的主页(index.jsp)。