小编PDS*_*tat的帖子

在Servlet过滤器中设置响应代码

我有一个实现javax.servlet.Filter对会话中设置的令牌对象进行一些身份验证的类,如果令牌变为无效我希望返回403禁止响应.所以我有类似的东西

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throw ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    ...
    ...
    // Something has gone wrong with auth set the response code and
    // continue with the chain
    response.setStatus(403);
    chain.doFilter(request, response);
}
Run Code Online (Sandbox Code Playgroud)

我想要发生的是<error-page>web.xml中定义的触发403响应代码

<error-page>
    <error-code>403</error-code>
    <location>/forbidden.xhtml</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

我可以看到浏览器开发工具的网络选项卡正确显示403类型响应.但浏览器没有像我期望的那样重定向到错误页面,我在这里做错了什么?

servlets filter java-ee

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

JPA 持久保存与现有实体有关系的新实体

我有两个有@ManyToMany关系的实体,让我们举一个常见的例子,学生和课程,我坚持一门新课程与学生列表,如果一个新学生在列表中,它应该级联新学生,如果它存在,它应该更新它。

对于新学生和新课程,它工作得很好,但对于新课程和现有学生,我会从数据库中抛出一个唯一的约束违规。关系类似于下面的。

@Entity
@Table
public class Course implements Serializable {

    @Id
    @Column(name = "CRS_ID")
    @SequenceGenerator(name = "rcrsSeq", sequenceName = "CRS_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "rcrsSeq")
    private Long id;

    @ManyToMany(cascade = {
        CascadeType.PERSIST,
        CascadeType.MERGE,
        CascadeType.REFRESH,
        CascadeType.DETACH
    })
    @JoinTable(name = "student_courses",
        uniqueConstraints = @UniqueConstraint(columnNames = {"STU_ID", "CRS_ID"}),
        joinColumns = {@JoinColumn(name = "CRS_ID")},
        inverseJoinColumns = {@JoinColumn(name = "STU_ID")}
    )
    private List<Student> students;

    //getters and setters

}


@Entity
@Table(uniqueConstaints = @UniqueConstraint(columnNames = {"username"}))
public class Student implements Serializable …
Run Code Online (Sandbox Code Playgroud)

java jpa eclipselink

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

将String中的所有正则表达式匹配项替换为match的子字符串

只是想知道对于给定的String这样是否有更好的解决方案,例如

xDLMContent <matches> something <and> dSecurityGroup <contains> somethingelse <and> xDLMSomeOtherMetaDataField <matches> anothersomethingelse
Run Code Online (Sandbox Code Playgroud)

它需要替换为

DLMContent <matches> something <and> SecurityGroup <contains> somethingelse <and> DLMSomeOtherMetaDataField <matches> anothersomethingelse
Run Code Online (Sandbox Code Playgroud)

规则为元数据字段以x或d开头​​,后跟大写字母,然后是1个或多个大小写混合的alpha字符。

这是我的解决方案,但我想知道是否还有更好的选择

public static void main(String[] args) {
    String s = "xDLMContent <matches> something <and> dSecurityGroup <contains> somethingelse <and> xDLMSomeOtherMetaDataField <matches> anothersomethingelse";
    Pattern pattern = Pattern.compile("[dx][A-Z][a-zA-Z]+");
    Matcher matcher = pattern.match(s);
    while (matcher.find()) {
        String orig = s.substring(matcher.start(), matcher.end());
        String rep = s.substring(matcher.start() + 1, matcher.end());
        s = s.replaceAll(orig, rep);
        matcher = pattern.match(s);
    }

    System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)

java

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

这个JPQL有什么问题:'没有节点的数据类型'

我有以下查询

  @Query("Select cp from ChannelProgramme cp"
      + " where cp.programme.programmeId in (select programmeId from Programme programme"
      + " inner join programme.performers performer"
      + " where performer.performerId in :performerID)"
      + " AND (cp.progDate BETWEEN :fromDate AND :toDate)"
      + " ORDER BY cp.progDate, cp.startTime")
  List<ChannelProgramme> findScheduledPerformerProgrammes(@Param("performerID") Long performerId, @Param("fromDate") Date fromDate, @Param("toDate") Date toDate);
Run Code Online (Sandbox Code Playgroud)

这引发了以下异常

Caused by: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.IdentNode 
 \-[IDENT] IdentNode: 'programmeId' {originalText=programmeId}

    at org.hibernate.hql.internal.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:174)
    at org.hibernate.hql.internal.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:924)
    at org.hibernate.hql.internal.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:692)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:665)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.collectionFunctionOrSubselect(HqlSqlBaseWalker.java:4905)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.inRhs(HqlSqlBaseWalker.java:4806)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4473) …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpql

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

标签 统计

java ×3

eclipselink ×1

filter ×1

hibernate ×1

java-ee ×1

jpa ×1

jpql ×1

servlets ×1