gpt4 book ai didi

java - Spring Security 自动身份验证不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:52:34 24 4
gpt4 key购买 nike

我在我的应用程序中使用了 spring security。当用户想要访问/privatePages/* 时,会出现一个登录屏幕以进行身份​​验证。这很好用。我想有一些东西作为访客访问所以在我的 Controller 中我做了这样的事情:

Authentication authentication = new UsernamePasswordAuthenticationToken("SAMPLE", "SAMPLE", getAuthority());
//authentication.setAuthenticated(true);
SecurityContextHolder.getContext().setAuthentication(authentication);

public Collection<GrantedAuthority> getAuthority() {
Collection<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>();
GrantedAuthority grantedAuthority = new GrantedAuthority() {
public String getAuthority() {
return "ROLE_RequiredRole";
}
};
grantedAuthorities.add(grantedAuthority);
return grantedAuthorities;
}

我可以看到现在执行了身份验证,因为此表达式为真:

SecurityContextHolder.getContext().getAuthentication().isAuthenticated()

但是我无法访问 /privatePages/somePage.jsp。它仍然将我重定向到登录页面。我错过了什么吗?

更新

<http pattern="/privatePages/**" auto-config="true" use-expressions="true" authentication-manager-ref="myManager" create-session="never">
<session-management invalid-session-url="/privatePages/login" />
<intercept-url pattern="/privatePages" access="hasRole('RequiredRole')"/>
<intercept-url pattern="/privatePages/" access="hasRole('RequiredRole')"/>
<form-login
login-page="/privatePages/login" . . . .

最佳答案

您正在 /privatePages/** 上制定规则,这意味着该规则将应用于所有前缀为 localhost:8080/privatePages/...,如果您在该规则中强制执行某种身份验证,那么无论您在 Controller 中做什么,它都会询问您,因为您的请求在到达该阶段之前会通过安全过滤器。

在您的 SecurityConfig 中尝试执行以下操作:

<http auto-config="true">
<intercept-url pattern="/privatePages" access="ROLE_RequredRole" />
<intercept-url pattern="/privatePages/somePage.jsp" access="ROLE_ANONYMOUS" />
</http>

这里我们使用ROLE_ANONYMOUS,这意味着角色不需要任何身份验证。参见 here了解更多信息。

关于java - Spring Security 自动身份验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39505799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com