我试图使用带有预定义用户id和密码的spring security实现内存身份验证。我使用基本的HTTP身份验证,并以“userid:password”的形式将用户id和密码组合作为头部发送(为了简单起见,我忽略了上述头部的编码)。
@RequestMapping(value = "/course", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ApiResponse> addCourse(@RequestBody Course course) {
return new ResponseEntity<ApiResponse>(new ApiResponse(HttpStatus.OK.value(), null), HttpStatus.OK);
}
@Test
public void testAddCourse() throws Exception {
String inputJsonRequest = JacksonMapperUtil.convertObjectToJsonString(course);
mockMvc.perform(MockMvcRequestBuilders.post("/course")
.contentType(MediaType.APPLICATION_JSON)
.content(inputJsonRequest)
.header("jane_doe", "admin_password"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.statusCode").value(HttpStatus.OK.value()));
}
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("john_doe")
.password("student_password")
.authorities("ROLE_STUDENT_USER")
.and()
.withUser("jane_doe")
.password("admin_password")
.authorities("ROLE_OFFICE_ADMIN");
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("john_doe")
.password("student_password")
.authorities("ROLE_STUDENT_USER")
.and()
.withUser("jane_doe")
.password("admin_password")
.authorities("ROLE_OFFICE_ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic()
.and()
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/course")
.hasAuthority("ROLE_OFFICE_ADMIN")
.antMatchers(HttpMethod.POST, "/student")
.hasAnyAuthority("ROLE_OFFICE_ADMIN", "ROLE_STUDENT_USER")
.antMatchers(HttpMethod.GET, "/**")
.permitAll()
.anyRequest()
.authenticated()
.and()
.exceptionHandling()
.accessDeniedHandler(accessDeniedHandler())
.authenticationEntryPoint(authenticationEntryPoint());
}
@Bean
RestAccessDeniedHandler accessDeniedHandler() {
return new RestAccessDeniedHandler();
}
@Bean
RestAuthenticationEntryPoint authenticationEntryPoint() {
return new RestAuthenticationEntryPoint();
}
}
@Component
public class RestAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e)
throws IOException, ServletException {
ApiResponse response = new ApiResponse(HttpStatus.UNAUTHORIZED.value(),
"Authentication Failure-The user name and password combination is incorrect");
OutputStream out = httpServletResponse.getOutputStream();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(out, response);
out.flush();
}
AccessDenied处理程序实现类
@Component
public class RestAccessDeniedHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AccessDeniedException e)
throws IOException, ServletException {
ApiResponse apiResponse = new ApiResponse(HttpStatus.FORBIDDEN.value(),
"Authorization Failure-This user does not have the sufficient level of access");
OutputStream out = httpServletResponse.getOutputStream();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(out, apiResponse);
out.flush();
}
使用的maven依赖项:
Spring boot版本-2.2.1.发布
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
您应该提供一个密码编码器,或者定义bean类似;
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
或者在密码前面键入{noop},如下所示
.withUser("john_doe")
.password("{noop}student_password")
年龄限制默认值不是由选择的,但是它与请求参数配合得很好。 YML文件 下面是带有请求参数Request的旧代码 下面是ModelAttribute请求的新代码
我试图让一个元素向右对齐。我使用了flexbox,因为我发现最容易将文本和任何图标完美对齐。下面的代码片段是我正在做的一个示例。该代码在Firefox和Chrome中运行良好,但在IE中无法使用justify内容。我已经有了“-ms flex pack”,但它没有做任何事情。IE中的内容是左对齐的,而不是右对齐的。
问题内容: 我的实体中有一个布尔型属性。这是我的注释: 但是效果并不理想。这是我作为生成表的结果得到的SQL代码: 我究竟做错了什么? 因此,当我尝试将此类的实例保存到数据库时,出现异常: 如果我删除财产: 因此在这种情况下,我可以保存创建的对象。但是仍然 没有设置默认值, 并且我在数据库中此字段的值中得到NULL。 有什么想法吗?如果重要,我会使用MySQL Server 5.1。我将非常感谢您
因此,我一直很难通过Cucumber/Scala集成来降低依赖关系。我终于有了一个简单的步骤定义运行,但当我按control+空格键时,步骤定义列表不会显示在我的功能文件中。但是,当我运行特性文件时,它运行成功。 测试转轮 步骤定义文件 以下是一些与Cucumber/Scala相关的依赖关系
我正在android应用程序中使用Firebase SDK进行手机身份验证OTP验证。这在调试版本上运行良好,但在发布版本上不起作用。 在Firebase项目中添加了我的调试SHA-1指纹。 在Firebase项目中添加了我的发布认证SHA-1指纹。 我还没有发布/发布构建到google play store。 提前谢谢
问题内容: 我正在Ubuntu 13.04(Raring Ringtail)之上运行最新版本的Docker: 但是当我启动容器时 我没有看到任何限制,并且我的内核启用了cgroups内存限制: 我在这里想念什么明显的东西? 问题答案: 将不会显示它,因为这是通过cgroups强制执行的。而是可以在主机(容器外部)上使用和cgroup内存进行检查: 要查看它的内存不足,可以运行一些将使用比分配的内存