2017-12-29 70 views
0

스프링 보안을 사용하여 간단한 로그인을 구현하려고합니다. (저는 스프링 보안의 초보자입니다). 필자는 간단한 "Hello world"예제 (link)를 포함하는 Spring Security 레퍼런스를 시작했다. 나는 (EAR 프로젝트에) 이클립스에서 웹 프로젝트를 준비했습니다, 파일 구조는 다음과 같습니다스프링 보안 초기화가 실패했습니다.

enter image description here

SecurityConfigSecurityWebApplicationInitializer 클래스 ("Hello World」의 예) 위의 링크에서와 동일하다. 또한 Log4j 2 구성 파일과 홈 페이지 (login.xhtml)를 추가하여 (지금은) "test"만 인쇄합니다. 나중에 사용자 정의 로그인 페이지로 사용됩니다.

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 
    <display-name>SpringSecurity</display-name> 
    <welcome-file-list> 
     <welcome-file>pages/login.xhtml</welcome-file> 
    </welcome-file-list> 
</web-app> 

EAR의 배포 어셈블리는 다음과 같습니다가 :

enter image description here

나는 7.1.1로 JBoss에서의 내 EAR을 배포, 오류가 없습니다

web.xmlwelcome-file 요소가 포함 , http://localhost:8080/SpringSecurity에 액세스하면 내 홈 페이지가 정상적으로 표시됩니다.

위의 구성에서 기본 로그인 페이지가 생성되어야한다고 생각합니다. 내 홈 페이지에 액세스하면 로그인 페이지가 나타납니다. Spring Security는로드되지 않았으며 홈 페이지에 액세스 할 때 보호 기능이없는 것처럼 보입니다.

나는 왜이 간단한 예제가 작동하지 않는지 이해하지 못합니다. 어떤 도움이 필요합니까?

+1

@dur 'SecurityConfig'에 이미 일부 로깅을 추가했습니다. 아무것도 기록되지 않으며 중단 점에 도달하지 않습니다. 따라서 구성이로드되지 않은 것처럼 보입니다. 이유는 확실하지 않습니다. – peterremec

+0

@ 더 아니오, 아니에요, 이미 확인했습니다. – peterremec

+1

@dur 예, JBoss 7은 Java Servlet 3.1을 지원합니다. 또한 Tomcat 8.5 (Java Servlet 3.1)에서 WAR 배포를 시도했습니다. – peterremec

답변

0

내 컴퓨터에 JBoss가 없습니다. 하지만이 예제를 Tomcat에 배포 할 수있었습니다.

문제는 전쟁 클래스 로더가 런타임에 스프링 항아리를 볼 수 없다는 것이 분명합니다.

해결 방법은 두 가지가있을 수 있습니다. 봄 항아리 만 전쟁 모듈 (안 귀에서 다른 모듈에 의한)에 의해 필요한 경우

  1. , 당신은 전쟁의 WEB-INF/lib 디렉토리에 귀의 lib 디렉토리에서 이러한 스프링 단지를 전환 할 수 있습니다.

  2. 전쟁 용 파일 MANIFEST.MF에 명시 적으로 Class-Path 항목을 설정할 수있는 것 이외의 다른 모듈에서 봄용 병과 기타 필요한 모듈을 휴대용 방식으로 필요로하는 경우.

Manifest-Version: 1.0 
Class-Path: lib/spring-beans-4.3.9.RELEASE.jar lib/spring-context-4.3.9.RELEASE.jar 

는 sapce에 ( ' ')로 구분 이런 식으로 필요한 모든 단지를 추가합니다.

참고 : -이 예제를 실행하려면 다음 jar를 사용했습니다.

spring-aop-5.0.2.RELEASE.jar 
spring-beans-5.0.2.RELEASE.jar 
spring-context-5.0.2.RELEASE.jar 
spring-core-5.0.2.RELEASE.jar 
spring-expression-5.0.2.RELEASE.jar 
spring-jcl-5.0.2.RELEASE.jar 
spring-security-config-5.0.0.RELEASE.jar 
spring-security-core-5.0.0.RELEASE.jar 
spring-security-crypto-5.0.0.RELEASE.jar 
spring-security-web-5.0.0.RELEASE.jar 
spring-web-5.0.2.RELEASE.jar 

이 스프링 및 스프링 보안 버전을 사용하면 코드를 약간 변경해야 할 수 있습니다.필요한 코드의 변경 사항에 대한 자세한 내용은 Spring Boot PasswordEncoder Error -을

User.withDefaultPasswordEncoder().username("user").password("user").roles("USER").build(); 

또는

User.withUsername("user").password("{noop}user").roles("USER").build(); 

을 참조하십시오.

+0

고마워, Tomcat 8.5에서 해결책 1을 시도해 보았다. 콘솔에서 오류가 발생하지 않았기 때문에 나에게 이상한 것처럼 보였습니다. 모든 것이 잘 보이지만 옳았습니다. 이제 JBoss에 예제를 배치해야합니다. 다시 한 번 감사드립니다! – peterremec