2014-10-07 6 views
1

spring-mvc 어플리케이션 위에 스프링 보안을 사용하고 있습니다. 현재 진행중인 응용 프로그램에 대한 몇 가지 사항이 있습니다.스프링 보안이 금지 된 페이지로 리디렉션됩니다 (403)

  1. 홈페이지는 로그인 페이지 즉 users()입니다. 로그인 메뉴는 HTML 드롭 다운 메뉴로 제공됩니다. userDetailsService()UserDetails() 대신 AuthenticationManager/제공을 구현
  2. 필수가 어떤 역할없이 홈 페이지를 볼 수있는 사람입니다.

현재 상황 :

  1. 는 엔트리 포인트-REF에 언급 된 403 페이지에 리디렉션합니다.
  2. user.jsp 또는/users로 리디렉션하는 방법을 모르는 경우
  3. net에서 찾을 수있는 모든 예제는 AuthenticationManager를 구현하는 것과 동일한 것을 보여줍니다. 일부 코드 :

보안-context.xml에

<import resource="servlet-context.xml" /> 

    <!-- Global Security settings --> 
    <security:global-method-security pre-post-annotations="enabled" /> 


    <!-- Spring Security framework settings --> 
    <security:http pattern="/users" use-expressions="true" auto-config="true" disable-url-rewriting="true" entry-point-ref="formAuthenticationEntryPoint"> 
     <security:session-management> 
      <security:concurrency-control max-sessions="5" error-if-maximum-exceeded="false"/> 
     </security:session-management> 
     <security:intercept-url pattern="/*" requires-channel="any" access="permitAll" /> 
     <security:intercept-url pattern="/**" requires-channel="any" access="permitAll" /> 
    </security:http> 
    <!-- queries to be run on data --> 
    <beans:bean id="formAuthenticationEntryPoint" 
       class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/> 

    <bean id="LoginServiceImplementation" class="com.WirTauschen.service.LoginServiceImpl"></bean> 

    <security:authentication-manager alias="authenticationManager"> 
     <security:authentication-provider user-service-ref="userDetailsService" /> 
    </security:authentication-manager> 

</beans> 

LoginServiceImpl :

@Service("userDetailsService") 
public class LoginServiceImpl implements UserDetailsService{ 
    @Autowired private UserDao userDao; 
    @Autowired private Assembler assembler; 

    @Override 
    @Transactional 
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
      UserDetails userDetails = null; 
      User user = userDao.findByName(username); 
      if(user == null) { throw new UsernameNotFoundException("Wrong username or password");} //Never specify which one was it exactly 
     return assembler.buildUserFromUserEntity(user); 
    } 
} 

로그인 양식

<nav class="col-lg-5 col-md-5 col-sm-5"> 
      <ul class="pull-right"> 
       <li class="purple"><a href="#"><i class="icons icon-user-3"></i> Login</a> 
        <ul id="login-dropdown" class="box-dropdown"> 
         <li> 
         <form id="form" action="<c:url value='/login'/>" method="POST"> 
          <div class="box-wrapper"> 
           <h4>LOGIN</h4> 

           <div class="iconic-input"> 
            <input type="text" placeholder="Username" name="username" id="username" value=""> 
            <i class="icons icon-user-3"></i> 
           </div> 
           <div class="iconic-input"> 
            <input type="password" placeholder="Password" name="password" id="password" value=""> 
            <i class="icons icon-lock"></i> 
           </div> 
           <input type="checkbox" id="loginremember"> <label for="loginremember">Remember me</label> 
           <br> 
           <br> 
           <div class="pull-left"> 
            <input name="submit" type="submit" class="orange" value="Login"> 
           </div> 
           <div class="pull-right"> 
            <a href="#">Forgot your password?</a> 
            <br> 
            <a href="#">Forgot your username?</a> 
            <br> 
           </div> 
           <br class="clearfix"> 
          </div> 
          <div class="footer"> 
           <h4 class="pull-left">NEW CUSTOMER?</h4> 
           <a class="button pull-right" href="create_an_account.html">Create an account</a> 
          </div> 
          </form> 
         </li> 
        </ul> 
       </li> 
       <li><a href="#"><i class="icons icon-lock"></i> Create an Account</a></li> 
      </ul> 
     </nav> 
(싸이트 (www.staruml.com) HTML 코드의 일부는 user.jsp에 싸여)

security-applicationContext.xml의 폼 로그인

<security:form-login login-page="/users" default-target-url="/users"/> 

도움이 될 것입니다. 봄 보안이 고문에 불과하다는 것을 결코 알지 못했습니다.

+0

사용자는 인증을받지 못합니다. 어떻게해야합니까? 'login-form'이 구성되어 있지 않으며 사용자 이름/암호를 읽지 않고 사용자를 인증하는 것도 없습니다. 가장 큰 문제는 너무 많은 일을하고 있으며, 사용자 정의 엔트리 포인트가 필요 없다는 것입니다. 단지 기본 'form-login'을 사용하십시오. –

+0

HTML 코드로 로그인 양식을 의미합니까, 그곳에 있습니다. 나는 그것을 게시하지 않았다. 붙여 넣기 위해 게시물을 편집 중입니다. –

+0

xml 구성에서와 같이'login-form '이 없습니다. 이것이 URL을 청취하고 로그인 시도를 처리하는 필터를 등록하는 구성 부분입니다. 당신이 당신의 사용자를 인증하는 것이 아무것도 없을 것이라고 덧붙이면 ... –

답변

1

UPDATE 당신은 봄이 어떻게 작동하는지 이해해야

: 클라이언트가 보호 된 리소스에 도착하려고 (사용자 페이지, 예를 들어); 그가 아직 로그인하지 않았다면, 그는 리디렉션되고 있습니다 (Spring은 그를 리디렉션합니다).

Spring beans.xml에 로그인 페이지가 무엇인지 선언합니다. "/login.html"을 넣으면 로그인 양식으로이 종류의 페이지를 가지고 있는지 확인해야합니다. 사용자가 로그인하면 Spring은 그를/users로 리디렉션합니다.

의미가 있습니까?

당신은 공개 랜딩 페이지 (예 : index.html을) (아마존 ... 등) 할 수 있습니다 II

UPDATE는 의미 사용자가 로그인하지 않고 볼 수 있습니다. 그런 다음, 링크가있다 '보호 된 리소스'로 변경하고, 사용자가 클릭하여 보호 된 리소스를 얻으려면 Spring이 로그인 페이지로 리디렉션합니다. 이를 원할 경우 특정 디렉토리 (예 :/secured) 아래에 '보호 된 리소스'를 넣고 거기에 모든 보호 기능을 넣으십시오. c ted resources HTML/JSP/etc. 빈에서이를 구성합니다.xml : ('환영'페이지는 보안이 설정되지 않았으므로 누구나 로그인하지 않고도 볼 수 있습니다.)

<sec:http pattern="/welcome" security="none" /> 

<sec:http authentication-manager-ref="authenticationManager"> 
     <sec:intercept-url pattern="/secure/**" access="ROLE_USER" /> 
+0

아니요, 3.2.5입니다. 그래서 나는 단지 username, password 및 submit을 사용하고 있습니다. 다른 것을 대신해서 제출하십시오. 위에 게시 한 양식 로그인을 확인 했습니까? 지금은/users에 대해 permitALL을 사용해도 로그인 페이지로 리디렉션되었습니다. –

+0

홈페이지에 로그인 할 수 없습니다. applicationname/users를 클릭하자 마자 바로/login으로갑니다. 그리고/login이라는 이름은 없습니다. 그래서 나는 404를 얻는다. –

+0

예. 말이된다. 알아. 예를 들어, amazon.com으로 이동하십시오. 그것은 바로 로그인하지 않습니다. 나는 그 행동을 원해. 나는 그것이 왜 나를 똑바로 로그인하게하는지 모른다. –