相关疑难解决方法(0)

Spring Boot PasswordEncoder错误

我正在学习通过做一个小项目来使用Spring Boot.目前我得到了主要课程:

package com.recweb.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
/*@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})*/
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

成员类(id,firstname ..),MemberController类:

package com.recweb.springboot;

import java.util.Arrays;
import java.util.List;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MemberController {
    @GetMapping("/members")
    public List<Member> getAllUsers() {
        return Arrays.asList(new Member(1, "amit"));
    }
}
Run Code Online (Sandbox Code Playgroud)

和WebSecurityConfig类:

package com.recweb.springboot;

import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager …
Run Code Online (Sandbox Code Playgroud)

spring spring-security maven spring-boot

78
推荐指数
8
解决办法
8万
查看次数

如何在Hibernate中更新后重新加载Spring Security Principal?

这一定是一个常见的问题......我觉得在谷歌搜索之后,我一定不能彻底浏览一下这个答案,或者说no1已经问过了......所以请原谅我.

我正在使用Spring Security和Hibernate等.

因此,用户/主体已登录并对其个人资料进行了一些更改.

我使用DAO更新配置文件(UserDetails),我希望我的Principal自动反映此更新.

然而,当我再次获得Principal时,我得到了脏版本(从我的初始登录).

有谁知道如何让Spring Security从Hibernate重新加载更新的UserDetails?

hibernate spring-security hibernate-generic-dao

33
推荐指数
1
解决办法
2万
查看次数

Spring安全性和JSON身份验证

我在spring/spring-mvc中有一个完全使用JSON通信的应用程序.现在我需要通过JSON使用spring security 3(使用LdapAuthenticationProvider)对我的应用程序进行身份验证.

默认的spring seurity提交表单需要这样的POST:

POST /myapp/j_spring_security_check HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
Host: 127.0.0.1:8080
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

j_username=myUsername&j_password=myPass
Run Code Online (Sandbox Code Playgroud)

但我想传递一个像这样的JSON对象:

{"j_username":"myUsername","j_password":"myPass"}
Run Code Online (Sandbox Code Playgroud)

我看了很多帖子喜欢这样,这样其他的这一个没有运气,在所有的Ajax的情况下完成一个POST像上面.

有任何想法吗?

spring json spring-mvc spring-security

29
推荐指数
5
解决办法
4万
查看次数

Spring安全"forward:"指令无法转发到登录表单

用户创建帐户后,我想自动登录该用户.

我有标准表单登录由弹簧过滤器处理/postlogin.如果我去http://localhost/postlogin它试图登录我(失败,因为我没有包括post参数),但做出了正确的尝试.

但是如果我想以编程方式记录用户并且我尝试从控制器返回:"forward:/ postlogin"我得到了404.

我假设forward:指令没有通过过滤器,因此没有得到处理UsernamePasswordAuthenticationFilter.

如何以编程方式手动引导登录?我希望在用户创建新帐户后执行此操作(他们应在完成注册后立即登录该帐户).

java authentication spring-mvc spring-security

9
推荐指数
2
解决办法
1万
查看次数

spring security 手动登录最佳实践

我正在使用 spring security 来实现程序化的手动用户登录。我有一个场景,我已经确定了用户的身份,并希望让他们登录。我不知道他们的密码,因此无法使用常规登录代码路径,您将表单提交到 url,即通过 servlet 拦截Filter,完成所有的 auth+session 魔术。

我搜索过,似乎大多数人创建了自己的Authentication对象,然后通过以下方式告诉 spring:

PreAuthenticatedAuthenticationToken authentication = new PreAuthenticatedAuthenticationToken(user, "", user.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
Run Code Online (Sandbox Code Playgroud)

确实,这是有效的。Spring 甚至为我将其放入会话中,使后续的 http 请求保持其身份验证状态。

但是,我觉得这是一个肮脏的黑客。我将提供一些细节,希望能给出与setAuthentication()在控制器内部使用以实现手动登录相关的问题的具体示例:

给出一个想法,我的配置是:

httpSecurity
    .authorizeRequests()
    .antMatchers("/test/**").permitAll()
    .antMatchers("/admin/**", "/api/admin/**").hasRole("USER_SUPER_ADMIN")
    .and()
    .formLogin()
    .loginPage("/sign-in?sp")
    .loginProcessingUrl("/api/auth/sign-in")
    .successHandler(createLoginSuccessHandler())
    .failureHandler(createLoginFailureHandler())
    .permitAll()
    .and()
    .logout()
    .logoutUrl("/api/auth/sign-out")
    .logoutSuccessHandler(createLogoutSuccessHandler())
    .and()
    .sessionManagement()
    .maximumSessions(1)
    .maxSessionsPreventsLogin(true)
    .sessionRegistry(sessionRegistry)
;
Run Code Online (Sandbox Code Playgroud)

上述配置中的要点:

  • 我使用自定义成功和失败处理程序进行表单登录
  • 我想为每个用户的最大并发会话配置行为
  • 我想维护 spring 的默认会话固定保护(登录时更改会话 ID)。
  • 我想使用会话注册表
  • ...更多这些会话/登录功能,如果我选择配置它。

我单步执行代码以查看 spring 如何处理表单登录。正如预期的那样,HttpSecurity当我使用表单登录时,Spring 执行了我的配置告诉它执行的所有会话/登录功能。但是,当我通过 进行自己的自定义/手动登录时SecurityContextHolder.getContext().setAuthentication(),它没有任何这些功能。这是因为 spring 在 servlet 内部完成了所有的会话/登录功能Filter,而我的编程代码不能真正调用过滤器。现在,我可以尝试添加缺少的功能自己,复制其代码:我看到弹簧过滤器用途:ConcurrentSessionControlAuthenticationStrategyChangeSessionIdAuthenticationStrategy …

java spring spring-security

7
推荐指数
2
解决办法
3794
查看次数