我有一个实现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类型响应.但浏览器没有像我期望的那样重定向到错误页面,我在这里做错了什么?
我有两个有@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) 只是想知道对于给定的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) 我有以下查询
@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)