小编Var*_*lok的帖子

Java 8方法引用未处理的异常

我正在使用Java 8进行项目,发现了一种我无法理解的情况.

我有这样的代码:

void deleteEntity(Node node) throws SomeException {
    for (ChildNode child: node.getChildren()) {
       deleteChild(child);
    }
}

void deleteChild(Object child) throws SomeException {
    //some code
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,但我可以用方法引用重写它:

void deleteEntity(Node node) throws SomeException {
    node.getChildren().forEach(this::deleteChild);
}
Run Code Online (Sandbox Code Playgroud)

并且此代码无法编译,从而产生错误Incompatible thrown types *SomeException* in method reference.

IDEA也给了我错误unhandled exception.

所以,我的问题是为什么?为什么代码为每个循环编译而不用lambda编译?

java lambda java-8

59
推荐指数
2
解决办法
3万
查看次数

Spring MVC验证器注释+自定义验证

我正在开发spring mvc应用程序,我应该基于Spring MVC验证器进行验证.我第一步为我添加了类和设置控制器的注释,它工作正常.现在我需要实现自定义验证器来执行复杂的逻辑,但我想使用现有的注释,只需添加额外的检查.

我的用户类:

public class User
{
    @NotEmpty
    private String name;

    @NotEmpty
    private String login; // should be unique
}
Run Code Online (Sandbox Code Playgroud)

我的验证员:

@Component
public class UserValidator implements Validator
{

    @Autowired
    private UserDAO userDAO;

    @Override
    public boolean supports(Class<?> clazz)
    {
        return User.class.equals(clazz) || UsersForm.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors)
    {
        /*
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "NotEmpty.user");
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "login", "NotEmpty.user");
        */
        User user = (User) target;
        if (userDAO.getUserByLogin(user.getLogin()) != null) {
            errors.rejectValue("login", "NonUniq.user");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的控制器:

@Controller
public class UserController …
Run Code Online (Sandbox Code Playgroud)

java validation spring spring-mvc

31
推荐指数
3
解决办法
3万
查看次数

CSRF令牌在登录期间到期

我正在研究Spring Web应用程序,我需要避免登录页面上的expire csrf令牌问题,因为如果用户等待太长时间并尝试只登录一种解决csrf问题的方法是重新加载页面并尝试再次登录.但它不是用户友好的,我想避免这种情况.

第一个问题:一般情况下(春季安全3.2.4)是否可能?没有禁用csrf.

我尝试使用security ="none"用于登录页面和spring seciruty"login_check",但是它不起作用,我得到无限重定向或者我得到错误没有映射为url"myhost/login_check".

第二个问题:我该怎么做?

spring csrf spring-security

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

在JSP中添加自定义taglib时出现NullPointerException

我需要为JSP页面实现一些自定义函数,为此我需要创建自定义taglib.这应该是简单的操作,但是当我添加空的taglib时,我在第一步遇到了问题.我有一个例外:

java.lang.NullPointerException
    at org.apache.tomcat.util.descriptor.tld.TldResourcePath.hashCode(TldResourcePath.java:156)
    at java.util.HashMap.hash(HashMap.java:338)
    at java.util.HashMap.get(HashMap.java:556)
    at org.apache.jasper.compiler.TldCache.getTaglibXml(TldCache.java:95)
    at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:179)
    at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:411)
    at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:469)
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1428)
    at org.apache.jasper.compiler.Parser.parse(Parser.java:139)
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227)
    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
    ...
Run Code Online (Sandbox Code Playgroud)

我的自定义tld(放在webapp/custom.tld中):

<?xml version="1.0">
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">

    <tlib-version>1.0</tlib-version>
    <short-name>MyLibrary</short-name>
    <uri>myTagLib</uri>

</taglib>
Run Code Online (Sandbox Code Playgroud)

JSP:

<%@ taglib prefix="myTag" uri="myTagLib" %>
Run Code Online (Sandbox Code Playgroud)

另外,我尝试在custom.tld中添加一些函数,但没有任何更改.

有人能帮我吗?我究竟做错了什么?

java jsp tomcat jsp-tags

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

具有null SrcName的GSSContext

我正在使用基于Windows域登录的SSO进行Web应用,为此我选择验证Kerberos票证.但是现在我遇到了一个我无法找到解决方案的问题.我设法验证一个没有例外的票证,但当我试图获取userName时,NullPointerException抛出,因为用户名是null,我不知道哪里有问题.

如果在验证期间没有出现任何异常,为什么用户名为null?

我如何获得userName: String clientName = gssContext.getSrcName().toString();

我基于此创建了我的客户端:

使用GSSManager验证Kerberos票证

如何通过GSS-API获取kerberos服务票?

http://docs.oracle.com/javase/7/docs/technotes/guides/security/jgss/single-signon.html

更新1:

我如何设置内容,只需复制粘贴表格/sf/answers/1781560371/:

final Oid spnegoOid = new Oid("1.3.6.1.5.5.2");

GSSManager gssmgr = GSSManager.getInstance();

// tell the GSSManager the Kerberos name of the service
GSSName serviceName = gssmgr.createName(this.servicePrincipal, GSSName.NT_USER_NAME);

// get the service's credentials. note that this run() method was called by Subject.doAs(),
// so the service's credentials (Service Principal Name and password) are already
// available in the Subject
GSSCredential serviceCredentials = gssmgr.createCredential(serviceName,
        GSSCredential.INDEFINITE_LIFETIME, …
Run Code Online (Sandbox Code Playgroud)

java kerberos jgss spring-security-kerberos

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

通过 AJAX 将数组传递到 Spring MVC

我正在研究 spring mvc 应用程序,我应该基于 Spring MVC 验证器进行验证,但验证但 AJAX 请求。因此,当我只发送单个数据时,一切正常,Spring 会将数据从请求映射到对象并对其进行验证。但是当我添加新的数组参数时,Spring 会抛出一个异常:

java.lang.NumberFormatException: For input string: ""
Run Code Online (Sandbox Code Playgroud)

我的用户类:

public class User
{
    @NotEmpty
    private String login;

    private List<Department> departments;
}
Run Code Online (Sandbox Code Playgroud)

我的控制器:

@Controller
public class UserController
{
    @RequestMapping(value = "/save")
    public ModelAndView save(@Valid @ModelAttribute("user") final User user,
            BindingResult result) throws Exception
    {
       // do action
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 AJAX 请求(POST):

http://localhost:8080/myApp/user/save?departments%5B%5D=1&departments%5B%5D=3&id=&login=Test
Run Code Online (Sandbox Code Playgroud)

我的 JS(jQuery):

var form = $('.add-form');
var fields = form.find('input');
var data = {};
// get valud from input fields
for …
Run Code Online (Sandbox Code Playgroud)

ajax jquery spring spring-mvc

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

Spring MVC使用dot返回URL上的HTTP 406

我发现了Spring MVC的一个非常奇怪的行为.

我有控制器方法:

@RequestMapping (value = "/delete/{id:.*}", method = RequestMethod.DELETE)
public ResponseEntity<Response> delete(@PathVariable (value = "id") final String id) {
    HttpStatus httpStatus = HttpStatus.OK;
    final Response responseState = new Response( ResponseConstants.STATUS_SUCCESS );
    try {
        POJO pojo = mediaFileDao.findById( id );
        if (pojo != null) {
            delete(pojo);
        } else {
            httpStatus = HttpStatus.NOT_FOUND;
            responseState.setError( "NOT_FOUND" );
        }
    } catch (Exception e) {
        httpStatus = HttpStatus.INTERNAL_SERVER_ERROR;
        responseState.setError( e.getMessage() );
    }
    return new ResponseEntity<>( responseState, httpStatus );
}
Run Code Online (Sandbox Code Playgroud)

所以,问题是当id包含点(例如"my_file.wav")时,Spring在任何情况下都会返回HTTP 406,但是如果id不包含点,则Spring会按照我的方式返回responseState(作为json).我尝试以不同的方式修复它(添加@ResponseBody,更改jackson版本,将Spring降级到4.0)但没有任何结果.

谁能帮我?

更新我为Spring …

java spring path-variables spring-mvc http-delete

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