我正在尝试使用j_spring_security_logout设置我的应用程序的logut但由于某种原因它无法正常工作,我一直收到404错误.
我正在调用这样的函数:
<a href="<c:url value="/j_spring_security_logout"/>"><img border="0" id="logout" src="./img/logout.png" /></a>
我在WebContent/jsp/my应用程序主页面中,登录和注销页面在WebContent/login /中.
我还检查了Spring安全注销的其他帖子问题但是那里给出的解决方案对我不起作用.
在这里你可以看到我的web.xml
<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>
Run Code Online (Sandbox Code Playgroud)
这是我的spring-security.xml
<http auto-config="true">
<intercept-url pattern="/*" access="ROLE_USER" />
<form-login login-page="/login/login.jsp"
authentication-failure-url="/login/errorLogin.jsp"/>
<logout logout-success-url="/" logout-url="/login/logout.jsp" />
</http>
<beans:bean id="myAuthenticationProvider"
class="myapp.web.authentication.WSAuthenticationProvider">
</beans:bean>
<authentication-manager>
<authentication-provider ref="myAuthenticationProvider"/>
</authentication-manager>
Run Code Online (Sandbox Code Playgroud)
提前致谢.
有没有办法告诉 Eclipse 格式化程序,当字符串太长时,它应该将其拆分+以自动适应最大线宽?
例如,如果我的最大线宽是 80,我会喜欢这个:
String s = "This is a very very very very very very very very very very very very very very very very very very very long String";
Run Code Online (Sandbox Code Playgroud)
变成这样:
String s = "This is a very very very very very very very very very very very"
+ " very very very very very very very very long String";
Run Code Online (Sandbox Code Playgroud) 我在 Effective Java 中读到你不应该使用有界通配符作为返回类型,但我不知道我应该怎么做。我的代码编译的唯一方法是RequestCloner<? extends HttpUriRequest>在静态工厂中使用作为返回类型。我做错了什么还是有解决方法?
注意:要注意的一件事是HttpUriRequest有方法setHeader,但只有HttpPost方法setEntity。
abstract class RequestCloner<T extends HttpUriRequest> {
protected T clonedRequest;
private enum RequestType {
GET, POST, DELETE
}
static RequestCloner<? extends HttpUriRequest> newInstance(
String type, String url) {
RequestType requestType = RequestType.valueOf(type);
switch (requestType) {
case GET:
return new GetRequestCloner(url);
case POST:
return new PostRequestCloner(url);
case DELETE:
return new DeleteRequestCloner(url);
default:
throw new IllegalArgumentException(String.format(
"Method '%s' not supported",
type));
}
}
public abstract HttpUriRequest …Run Code Online (Sandbox Code Playgroud) 我在使用自定义 JsonDeserializer 时遇到问题。我正在尝试根据 Rest 服务调用接收到的 JSON 消息来使用抽象类的不同实现(如果数据是一个Array使用的,如果它是String另一个使用):
@Path("/rest/cipher")
public interface CipherManager {
@POST
@Consumes("application/json")
@Produces("application/json")
@Path("/encrypt")
public Response cipher(AbstractCipherRequestBean jsonRequestData);
}
Run Code Online (Sandbox Code Playgroud)
解串器看起来像这样:
public class CipherRequestDeserializer extends JsonDeserializer<AbstractCipherRequestBean> {
@Override
public AbstractCipherRequestBean deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
ObjectMapper mapper = (ObjectMapper) jp.getCodec();
ObjectNode root = (ObjectNode) mapper.readTree(jp);
Class<? extends AbstractCipherRequestBean> abstractCipherRequestBeanClass = null;
Iterator<Entry<String, JsonNode>> elementsIterator = root.getFields();
while (elementsIterator.hasNext()) {
Entry<String, JsonNode> element = elementsIterator.next();
String name = element.getKey();
if(name.equals("b64Data")){
if(element.getValue().isArray()){
abstractCipherRequestBeanClass = …Run Code Online (Sandbox Code Playgroud) 我不明白这种行为.
这段代码符合:
public class A {
private String s;
private Function<String, String> f = e -> s;
public A(String s) {
this.s = s;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我做s最后的,那么我得到一个编译器错误:
public class A {
private final String s;
private Function<String, String> f = e -> s; // Variable 's' might not have been initialized
public A(String s) {
this.s = s;
}
}
Run Code Online (Sandbox Code Playgroud)
这是为什么?如果是另一种方式,我明白了,但是当我声明一个字段final(这迫使我在构造函数中初始化它的值)时,编译器是怎么抱怨的,当它不是时它就可以了final?
我在Spring中实现了一个工厂bean来实例化超类的不同子类.我遇到的问题是超类属性不存在@Autowired(我猜是由于new工厂方法中的命令).这是我的代码:
@Component
public class ConfigBeanImpl implements ConfigBean{
@Override
public String expandParam(String param) {
return String.format("expanded %s", param);
}
}
public abstract class FactoryBean {
@Autowired
protected ConfigBean configBean;
private String property;
protected FactoryBean() {
this.property = configBean.expandParam("property");
}
public abstract String getProperty();
public static FactoryBean GET(int id) {
return new FactoryBeanGet(id);
}
public static FactoryBean POST(String param){
return new FactoryBeanPost(param);
}
}
public class FactoryBeanGet extends FactoryBean {
private int id;
protected FactoryBeanGet(int id) {
this.id …Run Code Online (Sandbox Code Playgroud)