gpt4 book ai didi

Java spring security - 拦截不同登录的子域url?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:59 25 4
gpt4 key购买 nike

我有一个安装了 spring security 并且运行良好的应用程序——它目前用完了 www.exampledomain.com .

我现在想扩展应用程序跑出一个子域。例如newapp.exampledomain.com .

唯一的问题是,对于这个新应用程序,用户需要登录。在 Spring ,通过 <intercept-url pattern="/Admin/*" access="ROLE_GENERAL"/> 拦截 url 非常容易。

但是当你想拦截一​​个子域来登录时,你会怎么做呢?例如,以下内容对我不起作用:

<intercept-url pattern="http://newapp.exampledomain.com/*" access="ROLE_GENERAL"/>

关于如何解决这个问题有什么想法吗?

最佳答案

一个选择是编写您自己的 AccessDecisionVoter,它扩展了 RoleVoter并根据主机名添加额外的检查。像这样:

public class MyVoter extends RoleVoter {
public int vote(Authentication authentication,
java.lang.Object object,
java.util.Collection<ConfigAttribute> attributes) {
FilterInvocation filterInvocation = (FilterInvocation) object;
HttpRequest request = filterInvocation.getHttpRequest();
// get subdomain from request
String subdomain = getSubdomain(request);
if ("free".equals(subdomain)) {
return ACCESS_GRANTED;
}
else {
super.vote(authentication, object, attributes);
}
}
}

然后连接你的选民:

<security:http auto-config="true" 
use-expressions="true"
access-decision-manager-ref="accessDecisionManager">
...
</security:http>

<bean id="accessDecisionManager"
class="org.springframework.security.access.vote.UnanimousBased">
<property name="decisionVoters">
<list>
<bean class="com.acme.MyVoter" />
</list>
</property>
</bean>

如果您想更进一步,您还可以编写自己的 configuration attributes这将允许您删除选民中的硬编码主机名检查并执行类似的操作:

<intercept-url pattern="/Admin/*" access="ROLE_GENERAL" domain="free.acme.com" />

关于Java spring security - 拦截不同登录的子域url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9910331/

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