>  기사  >  Spring Security는 나머지 서비스에서 인증된 사용자와 인증되지 않은 사용자에 대한 사용자 정보를 가져옵니다.

Spring Security는 나머지 서비스에서 인증된 사용자와 인증되지 않은 사용자에 대한 사용자 정보를 가져옵니다.

王林
王林앞으로
2024-02-08 23:00:23747검색

보안은 웹 애플리케이션을 개발할 때 중요한 고려 사항입니다. 사용자 데이터를 보호하고 무단 액세스를 방지하려면 신뢰할 수 있는 인증 및 권한 부여 메커니즘을 사용해야 합니다. Spring Security는 애플리케이션을 보호하기 위한 완전한 솔루션 세트를 제공하는 강력하고 널리 사용되는 보안 프레임워크입니다. 이 기사에서는 Spring Security에서 인증된 사용자와 인증되지 않은 사용자에 대한 사용자 정보를 얻는 방법을 살펴보겠습니다. PHP 편집자 Baicao는 Spring Security의 기능을 활용하여 사용자 정보를 얻고 다른 서비스 간에 사용자 정보를 공유하는 방법을 보여줍니다. 당신이 초보자이든 숙련된 개발자이든 이 글은 Spring Security에 대한 자세한 정보를 제공하고 애플리케이션의 보안을 향상시키는 데 도움이 될 것입니다.

질문내용

봄휴식 서비스가 있는데, 인증유저와 비인증유저 모두 사용하고 싶습니다. 사용자가 인증되면 securitycontextholder.getcontext().getauthentication()에서 사용자 정보를 가져오고 싶습니다.

  • 내가 사용한다면 .antmatchers("/app/rest/question/useroperation/list/**").permitall() 아래와 같이 ouath2 구성에서 사용자 정보를 얻을 수 있습니다. 인증된 사용자이지만 인증되지 않은 사용자에게는 401 오류가 발생합니다.
  • 만약 내가 .antmatchers("/app/rest/question/useroperation/list/**").permitall() 웹 보안에서 URL을 무시합니다. web.ignoring()..antmatchers("/app/rest/question/useroperation/list/**") securityconfiguration 아래와 같이 모든 사용자가 전화를 걸 수 있습니다. 서비스를 제공하지만 보안 컨텍스트에서 사용자 정보를 가져올 수 없습니다.

인증된 사용자와 인증되지 않은 사용자에 대해 URL을 호출하고 사용자가 로그인할 때 보안 컨텍스트에서 사용자 정보를 가져오도록 스프링 보안을 구성하는 방법입니다.

으아악

보안 구성

@configuration
@enableresourceserver
protected static class resourceserverconfiguration extends resourceserverconfigureradapter {

    @inject
    private http401unauthorizedentrypoint authenticationentrypoint;

    @inject
    private ajaxlogoutsuccesshandler ajaxlogoutsuccesshandler;

    @override
    public void configure(httpsecurity http) throws exception {
        http
                .exceptionhandling()
                .authenticationentrypoint(authenticationentrypoint)
                .and()
                .logout()
                .logouturl("/app/logout")
                .logoutsuccesshandler(ajaxlogoutsuccesshandler)
                .and()
                .csrf()
                .requirecsrfprotectionmatcher(new antpathrequestmatcher("/oauth/authorize"))
                .disable()
                .headers()
                .frameoptions().disable()
                .sessionmanagement()
                .sessioncreationpolicy(sessioncreationpolicy.stateless)
                .and()
                .authorizerequests()
                .antmatchers("/views/**").permitall()
                .antmatchers("/app/rest/authenticate").permitall()
                .antmatchers("/app/rest/register").permitall()
                .antmatchers("/app/rest/question/useroperation/list/**").permitall()
                .antmatchers("/app/rest/question/useroperation/comment/**").authenticated()
                .antmatchers("/app/rest/question/useroperation/answer/**").authenticated()
                .antmatchers("/app/rest/question/definition/**").hasanyauthority(authoritiesconstants.admin)
                .antmatchers("/app/rest/logs/**").hasanyauthority(authoritiesconstants.admin)
                .antmatchers("/app/**").authenticated()
                .antmatchers("/websocket/tracker").hasauthority(authoritiesconstants.admin)
                .antmatchers("/websocket/**").permitall()
                .antmatchers("/metrics/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/health/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/trace/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/dump/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/shutdown/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/beans/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/info/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/autoconfig/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/env/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/trace/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/api-docs/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/protected/**").authenticated();

    }

}

Solution

permitall() 仍然需要 authentication 对象出现在 securitycontext

oauth가 아닌 사용자의 경우 익명 액세스를 활성화하면 됩니다.

으아악

익명 액세스는 추가 필터를 추가합니다: anonymousauthenticationfilter到填充anonymousauthenticationtoken作为身份验证信息的过滤器链,以防securitycontext中没有authentication 개체

/public/authphpcnendcphp를 통해 인증 사용자를 확인하기 위한 보안 구성이 있습니다. 중국어:

으아악

위 내용은 Spring Security는 나머지 서비스에서 인증된 사용자와 인증되지 않은 사용자에 대한 사용자 정보를 가져옵니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제