小编Sha*_*eep的帖子

可以将此处结果上的匹配替换为map_err和“?”

我有一些代码看起来像这样(大大简化的版本)。函数接受两个类型为LoadClientand的函数参数CheckApproval,并返回错误或字符串。

pub struct Client {
    pub id: String,
}

pub enum MyErr {
    RequiresApproval(Client, String),
    LoadFailed,
}

pub fn authorize<LoadClient, CheckApproval>(load_client: LoadClient, check_approval: CheckApproval) -> Result<String, MyErr> 
where
   LoadClient: FnOnce(String) -> Result<Client, String>,
   CheckApproval: for<'a> FnOnce(&'a Client, &str) -> Result<&'a str, ()>,
{
    let client = load_client("hello".to_string()).map_err(|_| MyErr::LoadFailed)?;
    let permission = "something";

    // This doesn't compile
    // let authorized = check_approval(&client, permission).map_err(|_| MyErr::RequiresApproval(client, permission.to_string()))?;
    // Ok(authorized.to_string())

    // This version does
    match check_approval(&client, permission) {
        Err(_) => …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
1
解决办法
1万
查看次数

Spring Security不处理前/后注释

我正在尝试使用Web应用程序进行前/后注释,但出于某种原因,spring-security没有发生任何事情.

web.xml中:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/rvaContext-business.xml
        /WEB-INF/rvaContext-security.xml  
    </param-value>
</context-param>

<!-- Spring security filter -->
<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>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>rva</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>rva</servlet-name>
    <url-pattern>/rva/*</url-pattern>
 </servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

rvaContext-security.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
  xmlns:beans="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/security
       http://www.springframework.org/schema/security/spring-security-3.0.xsd">

<global-method-security pre-post-annotations="enabled"/>

<http use-expressions="true">
    <form-login login-page="/login" />
    <logout />
    <remember-me />
</http>
...
Run Code Online (Sandbox Code Playgroud)

LoginController类:

@Controller
@RequestMapping("/login")
public class LoginController {

    @RequestMapping(method = RequestMethod.GET)
    public String login(ModelMap map){
        map.addAttribute("title", "Login: AD Credentials");
        return("login");
    }

    @RequestMapping("/secure") …
Run Code Online (Sandbox Code Playgroud)

spring-security

2
推荐指数
1
解决办法
6787
查看次数

原因:无法在spring security中将null或空值传递给构造函数

当我尝试通过LDAP从数据库验证用户时收到以下错误.

Reason: Cannot pass null or empty values to constructor.
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我做错了什么?

<?xml version="1.0" encoding="UTF-8"?>  
<beans:beans xmlns="http://www.springframework.org/schema/security" 
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">  

<http auto-config="true">
<intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN" />
<intercept-url pattern="/administrator.htm" access="ROLE_ADMIN" />
<!-- <form-login login-page="/dashboard.htm" default-target-url="/dashboard.htm" authentication-failure-url="/ExceptionPage.jsp" /> -->
<form-login/>
</http>

<authentication-manager>
<authentication-provider>
<!--   <user-service>
<user name="20022263" password="da" authorities="ROLE_USER" />
<user name="20039004" password="da" authorities="ROLE_ADMIN" />
</user-service> -->
   <jdbc-user-service data-source-ref="dataSource" 
users-by-username-query="SELECT a.GLOBALID AS username, a.PASSWORD AS password, a.Enabled AS enabled FROM EU_MAS_TBUSER a WHERE a.GLOBALID=?" 
 authorities-by-username-query="select eu.USERNAME AS username, r.ACCESSROLEID AS …
Run Code Online (Sandbox Code Playgroud)

spring spring-security

2
推荐指数
1
解决办法
8559
查看次数

您是否可以说每次使用字段而不重复使用哪个Haskell记录实例?

我最近创建了一个Config记录类型,其中包含在我的应用程序中使用的数据/函数.例如,让我们说吧

data Config m u = Config
    { issuer       :: Text
    , loadUser     :: LoadUser m u
    , authenticate :: Authenticate m
    }
Run Code Online (Sandbox Code Playgroud)

我有另一个功能,实际上从配置创建应用程序:

buildServer :: Config -> m Server
buildServer cfg = ...
Run Code Online (Sandbox Code Playgroud)

现在,每次我使用这些记录字段时,我都必须明确地应用它们cfg来获得我想要的东西:

    let someFunction = doSomething (issuer cfg) (loadUser cfg) (authenticate cfg)
Run Code Online (Sandbox Code Playgroud)

以前我只是在相同的范围内创建函数(没有配置数据类型),所以这只是:

    let someFunction = doSomething issuer loadUser authenticate
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以说"当我引用这些记录字段时,它们都适用于这个实例"在一段代码中,而不是每次都要重复它?我记得过去曾遇到类似这样的事情,但现在找不到,我可能错了.

haskell

2
推荐指数
2
解决办法
132
查看次数

使用spring security根据用户ROLES设置自定义登录后目标

我想在我的应用程序中根据用户ROLES设置自定义的登录后目的地.例如:如果尝试访问受保护资源时未提示表单登录,我希望根据不同角色显示不同页面.通过使用target-url我无法做到这一点.我怎么能通过使用Spring安全性来做到这一点?

java spring login spring-security

1
推荐指数
1
解决办法
1146
查看次数

标签 统计

spring-security ×3

spring ×2

haskell ×1

java ×1

login ×1

rust ×1