Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring安全问题-Web应用程序启动时没有错误,但行为不稳定_Java_Spring_Security_Spring Mvc_Spring Security - Fatal编程技术网

Java Spring安全问题-Web应用程序启动时没有错误,但行为不稳定

Java Spring安全问题-Web应用程序启动时没有错误,但行为不稳定,java,spring,security,spring-mvc,spring-security,Java,Spring,Security,Spring Mvc,Spring Security,我的SpringSecurityXWL配置不正确,我想知道它是什么。打开网站后,可以按预期访问页面/。如预期的那样,正在尝试访问/user/redirect to/login等。但是,不正确的登录信息会导致成功,用户会被定向到/user/files的页面内容。奇怪的是,url仍然是/login。此外,任何试图转到另一个/user/*页面的行为都会导致重定向到登录页面 但是,是的,我无法解决我的生活问题,任何帮助都是感激的。我将包括我的web应用程序的所有相关部分,以防它不是我的spring-se

我的SpringSecurityXWL配置不正确,我想知道它是什么。打开网站后,可以按预期访问页面/。如预期的那样,正在尝试访问/user/redirect to/login等。但是,不正确的登录信息会导致成功,用户会被定向到/user/files的页面内容。奇怪的是,url仍然是/login。此外,任何试图转到另一个/user/*页面的行为都会导致重定向到登录页面

但是,是的,我无法解决我的生活问题,任何帮助都是感激的。我将包括我的web应用程序的所有相关部分,以防它不是我的spring-security.xml文件

以下是my web.xml的相关部分:

<servlet>
  <servlet-name>spring</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring-security.xml
        /WEB-INF/spring-servlet.xml
    </param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/user/*</url-pattern>
</filter-mapping>

<servlet-mapping>
  <servlet-name>spring</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
以下是返回用户的DAO逻辑:

UserDetails userDetails;
Collection<SimpleGrantedAuthority> authorities = new ArrayList<SimpleGrantedAuthority>();
if (dbUser != null){
    authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
    userDetails = new User(dbUser.getEmail(), dbUser.getPassword(), authorities);
} else {
    userDetails = new User(null, null, authorities);
}
return userDetails;
最后,这里是login.jsp

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:th="http://www.thymeleaf.org"
  th:include="components/layout :: loggedout">
<div th:fragment="content">
    <div class="col-lg-4 col-md-4 col-sm-3 col-xs-2"></div>
    <div class="col-lg-4 col-md-4 col-sm-6 col-xs-8">
    <form name="f" th:action="@{/login}" method="post">               
        <fieldset>
            <legend>
                <h2 class="form-signin-heading">log in</h2>
            </legend>
            <div th:if="${param.error}" class="alert alert-error text-center">    
                Invalid username or password.
            </div>
            <div th:if="${param.logout}" class="alert alert-success text-center"> 
                You have been logged out.
            </div>
            <label for="username" class="sr-only">email address</label>
            <input name="username" type="email" class="form-control" placeholder="email address" required="true" autofocus="true" />
            <label for="password" class="sr-only">password</label>
            <input name="password" type="password" class="form-control" placeholder="password" required="true" />
            <div class="checkbox">
                <label>
                    <input type="checkbox" value="remember-me"> remember me </input>
                </label>
            </div>
            <div class="form-actions">
                <button class="btn btn-lg btn-primary btn-block">log in</button>
            </div>
        </fieldset>
    </form>
    </div>
    <div class="col-lg-4 col-md-4 col-sm-3 col-xs-2"></div>
</div>
</html>

登录
无效的用户名或密码。
您已注销。
电子邮件地址
暗语
记得我吗
登录

非常感谢您提供的任何帮助,如果您有任何问题,请询问。

幸运的是,这些评论为我指明了正确的方向-这实际上是两个不同的问题同时出现


post操作由我的登录控制器处理,而不是spring security。因此,我删除了post方法。此外,post没有被正确调用或传递正确的参数-因此我将操作更改为th:action=“@{/j_-spring_-security_-check}”,并将输入更改为j_-username和j_-password。谢谢@PatrickLC和@M.Deinum。

您可以尝试将web.xml中的springSecurityFilterChain从/user/*更改为/*并在登录表单中使用th:action=“@{/j_-spring_-security_-check}”和j_-username和j_-password的输入将
LoginController
spring-security为您处理。您只保护了
/user/*
其他所有内容都不受保护。
*
表示单个级别,而
***
表示0或更多级别。因此,我怀疑这两件事对保护您的应用程序没有帮助。最后,您的dao也是错误的,如果没有找到任何用户,它应该按照契约的定义返回NULL,但是您正在返回一个用户。@M.Deinum I仔细检查契约-它永远不应该返回NULL。但是,它应该抛出UserNotFoundException,这是我的设置中的另一个问题。谢谢你朝正确的方向努力。你是对的,我错了。
UserDetails userDetails;
Collection<SimpleGrantedAuthority> authorities = new ArrayList<SimpleGrantedAuthority>();
if (dbUser != null){
    authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
    userDetails = new User(dbUser.getEmail(), dbUser.getPassword(), authorities);
} else {
    userDetails = new User(null, null, authorities);
}
return userDetails;
@Controller
@RequestMapping(value="/login")
public class LoginController {  

TitanController titan = TitanController.getInstance();

@RequestMapping(method=RequestMethod.GET)
public String getLogin(Model model) {
    return "login";
}
@RequestMapping(method=RequestMethod.POST)
public String postLogin(){
    return "files";
}
}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:th="http://www.thymeleaf.org"
  th:include="components/layout :: loggedout">
<div th:fragment="content">
    <div class="col-lg-4 col-md-4 col-sm-3 col-xs-2"></div>
    <div class="col-lg-4 col-md-4 col-sm-6 col-xs-8">
    <form name="f" th:action="@{/login}" method="post">               
        <fieldset>
            <legend>
                <h2 class="form-signin-heading">log in</h2>
            </legend>
            <div th:if="${param.error}" class="alert alert-error text-center">    
                Invalid username or password.
            </div>
            <div th:if="${param.logout}" class="alert alert-success text-center"> 
                You have been logged out.
            </div>
            <label for="username" class="sr-only">email address</label>
            <input name="username" type="email" class="form-control" placeholder="email address" required="true" autofocus="true" />
            <label for="password" class="sr-only">password</label>
            <input name="password" type="password" class="form-control" placeholder="password" required="true" />
            <div class="checkbox">
                <label>
                    <input type="checkbox" value="remember-me"> remember me </input>
                </label>
            </div>
            <div class="form-actions">
                <button class="btn btn-lg btn-primary btn-block">log in</button>
            </div>
        </fieldset>
    </form>
    </div>
    <div class="col-lg-4 col-md-4 col-sm-3 col-xs-2"></div>
</div>
</html>