2014-10-07 229 views
1

我在spring-mvc应用程序上使用了spring-security。关于我正在开发的应用程序的几点意见。Spring Security重定向到禁止页面(403)

  1. 主页是登录页即/ users()。登录菜单用作HTML下拉菜单。
  2. 实施userDetailsService()UserDetails(),而不是AuthenticationManager /提供商
  3. 需要的是人查看主页,没有任何作用。

现状:

  1. 并重定向到入口点-REF提到403页。
  2. 不知道如何将其重定向到user.jsp或/ users
  3. 我可以在网上找到的所有示例都显示出实现`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> 
(的hompage HTML代码部分user.jsp笼罩)

从security-applicationContext.xml以表单登录

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

任何帮助都会很好。从来不知道春季安全只会是折磨。

+0

您的用户从来没有得到验证,又该如何呢?没有配置“登录表单”,因此没有任何内容会读取用户名/密码,也不会对用户进行身份验证。主要问题是你自己做得太多,你不需要自定义入口点,只需使用默认的'form-login'即可。 – 2014-10-07 12:10:50

+0

您的意思是登录表单作为HTML代码,它就在那里。我没有发布它。我正在编辑帖子来粘贴它。 – 2014-10-07 12:16:08

+0

没有xml配置中的'login-form'。这是注册过滤器的配置部分,该过滤器监听url并处理登录尝试。如果您没有添加,那么将不会有任何验证用户身份的信息... – 2014-10-07 12:23:00

回答

1

UPDATE

你必须了解Spring如何工作的:客户端试图得到一个受保护的资源(用户页面,例如);如果他还没有登录,他将被重定向(Spring重定向他)到登录页面。

在你的Spring beans.xml中,你声明了什么是你的登录页面。如果你在那里放置“/login.html”,你必须确保你有这种页面和登录表单。用户登录后,Spring会将他重定向回/ users。

有意义吗?

UPDATE II

你可以(像亚马逊...)的登录页面(如index.html的),这是公开的,这意味着用户可以看到它不登录,然后有链接有到'受保护的资源',如果用户尝试点击并获取受保护的资源,Spring会将其重定向到登录页面。如果你想这样做,你把'受保护的资源'放在一个特定的目录下(例如/ secured),并且你在那里放置所有的保护资源HTML/JSP/etc。你在bean中配置它。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,这就是为什么我只是使用用户名,密码和提交..而不是别的。你检查过我上面发布的表单登录吗?现在,即使我为/ users使用了permitALL,我也只是重定向到了登录页面。 – 2014-10-07 12:54:25

+0

我无法进入主页本身登录。只要我点击应用程序名称/用户,立即进入/登录。并没有任何名称/登录。所以我得到了404. – 2014-10-07 13:01:32

+0

是的。说得通。我知道。但是,例如,去亚马逊网站。它不会立即告诉你登录。我想要那种行为。我不知道为什么它直接让我直接登录。 – 2014-10-07 13:19:43

相关问题